关于完成端口一个细节性问题。

gwwgww 2004-06-23 11:51:31
如果一个completion packet未用GetQueuedCompletionStatus函数取走,会不会影响后继的I/O请求?

举个例子(代码中省略了创建完成端口和将新连接socket与完成端口关联的部分):

在一个等待连接的线程中
for(;;)
{
new = Accept(.....)

ReadFile(.....);

}
在一个工作线程中
for(;;)
{
GetQueuedCompletionStatus(.....);

WriteFile(.........);


ReadFile(.......)

}
GetQueuedCompletionStatus在工作线程中的第一次调用是处理主线程中的ReadFile完成后发来的completion packet,接下来写一次socket,并不调用GetQueuedCompletionStatus,再读一次socket,现在进入下一次循环,我在测试时GetQueuedCompletionStatus总是返回ERROR_IO_PENDING。

为什么会这样呢??
...全文
145 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hmnes125 2004-06-24
完成端口是使用完成键驱动的,如果没有设置当前操作的完成键你的处理肯定是有问题的
  • 打赏
  • 举报
回复
everandforever 2004-06-23
socket怎么用起readfile了.

嗯, 另外, 用的不对啊, 你的完成端口. 一句两句说不清.
  • 打赏
  • 举报
回复
gwwgww 2004-06-23
只是一个简单的回射程序的服务端,我多加入一个GetQueuedCompletionStatus的调用就不会出问题,能正常工作,像这样:
for(;;)
{
GetQueuedCompletionStatus(.....);
。。。
WriteFile(.........);
。。。

GetQueuedCompletionStatus(.....);
。。。
ReadFile(.......)

}
  • 打赏
  • 举报
回复
gwwgww 2004-06-23
WriteFile,ReadFile可以用于socket

hFile can be any handle opened with the FILE_FLAG_OVERLAPPED flag by the CreateFile function, or a socket handle returned by the socket or accept function.
  • 打赏
  • 举报
回复
相关推荐
发帖
网络编程

1.8w+

社区成员

VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
帖子事件
创建了帖子
2004-06-23 11:51
社区公告
暂无公告