一个IOCP的问题,求解释

莫_问 2012-09-20 04:55:39
网上看到关于IOCP,有这么下面一条忠告:

13- 刚刚想起来,overlapped对象要为每次的send和recv操作都准备一个全新的,不能图方便重复利用。


求高人解释,为什么不能重复利用,否则会有哪些问题?
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
youngwolf 2012-09-21
  • 打赏
  • 举报
回复
每次用之前,全部memset为0,就可以用了,道理很简单,系统怎么知道你这个overlapped是新的,还是之前用过的呢?就算能,它做这个检测也没有意义!
wapjia43106140 2012-09-21
  • 打赏
  • 举报
回复
可以重用.他的意思你要重用你必须重新设置overlapped它状态值.里面有事件状态值.
就像变量一下.你有值.你要用得重新初始化.
莫_问 2012-09-20
  • 打赏
  • 举报
回复

[Quote=引用 1 楼 的回复:]

刚刚想起来,overlapped对象要为每次的send和recv操作都准备一个全新的,不能图方便重复利用。
[/Quote]



如果按照这个说法,我投递一个接收数据请求,收到数据之后,第二次再投递一个接收数据请求,还必须重新new一个OVERLAPPED对象,这样也不是办法?


还是难道对这句话的理解有误!


莫_问 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

This structure should always be initialized to zero before it is used in a function call. If it is not, the function may fail and return ERROR_INVALID_PARAMETER
A common mistake is to reuse an OVERLAPPED structure before the previous asynchronous operation has been completed. You should use a separate structure for each request
[/Quote]

MSDN上只是说了重复使用一个OVERLAPPED结构是一种错误,一个异步操作已完成后,应该使用一个新OVERLAPPED投递请求,而没说原因。


比如我投递一个接收数据请求,收到数据之后,第二次再投递一个接收数据请求,为什么不能重复使用同一个OVERLAPPED,这样会造成什么问题?
Joseph-Growth 2012-09-20
  • 打赏
  • 举报
回复
This structure should always be initialized to zero before it is used in a function call. If it is not, the function may fail and return ERROR_INVALID_PARAMETER
A common mistake is to reuse an OVERLAPPED structure before the previous asynchronous operation has been completed. You should use a separate structure for each request
MSDN上面这样说的,我也学习了。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧