实战经验:通过NotifyAddrChange侦测网络变化( 三 )
当一个函数以重叠I/O的方式执行时 , 这个函数会立即返回 , 不管I/O操作是否完成 。 这个执行模式可以使得较为耗时的I/O操作在后台执行 , 调用线程可以继续执行其他任务 。
那么 , 如何知道I/O操作是否执行完成呢?
有以下两种方法
1) 通过使用GetOverlappedResult来等待I/O操作是否完成 。 GetOverlappedResult的升级版GetOverlappedResultEx还可以指定一个等待超时时间 。 在这种情况下 , 我们需要将 GetOverlappedResult的最后一个bWait参数设置成TRUE 。
2) 在初始化OVERLAPPED结构体时 , 我们指定一个手动重置的事件对象句柄 , 然后执行I/O函数调用 , 此时I/O函数因为执行重叠I/O会立即返回 , 如果想知道操作什么时候完成 , 可以使用WaitForSingleObject来等待这个事件句柄 , 等待成功后 , 继续使用GetOverlappedResult来获取I/O操作的更详细的操作结果 , 例如 , 本次I/O操作实际传输的多少个字节 。
如果需要取消重叠I/O , 我们可以使用CancelIoEx并传递一个OVERLAPPED结构体 , 此结构体包含待取消的目标句柄 , 此函数将尝试取消正在进行的I/O操作 。
推荐阅读
- 梦幻西游|梦幻西游:千亿经验奖励5连击!长久地坚持在此刻能否收获幸运?
- 手机游戏|梦幻西游手游:如何保证贸易少亏甚至小赚 小号、经验环必不可少
- 我的世界|我的世界:“最奢侈”的附魔是什么?我给胡萝卜钓竿打上经验修补
- jcg|影之诗:JCG的亚军人偶造物 实战六十盘感想
- 盲僧|LOL手游盲僧是英雄代表?灵药再推进阶教学,双区王者的经验
- 传奇世界|传奇世界:获声望的几种途径经验
- 大话西游2|大话西游2:一头年兽6千万经验,玩家怒刷3小时,疯狂上电视!
- 剑魂|DNF:如何短时间打出更好伤害?剑魂干货来了,实战主流装备搭配
- 戒指|梦幻西游:10张玲珑图全程无经验,宝石还只出了一个!
- 挂机|玩游戏赚钱,个人总结日进200经验,有电脑就行!