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

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。

为什么会这样呢??
...全文
163 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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.

18,363

社区成员

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

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