关于windows iocp的一个问题
Posted
技术标签:
【中文标题】关于windows iocp的一个问题【英文标题】:A question about windows iocp 【发布时间】:2009-05-06 16:58:05 【问题描述】:当我在 Windows Vista 中编写一个关于 IO 完成端口的程序时, 第一个示例不起作用,GetQueuedCompletionStatus() 无法获取 任何重叠的结构。
所以我将 OVERLAPPED 结构放在全局范围内,它的效果非常好。 这是为什么呢?
代码1:
int main()
OVERLAPPED o;
..
CreateIoCompletionPort(....);
for (int i = 0; i<10; i++)
WriteFile(..,&o);
OVERLAPPED* po;
GetQueuedCompletionStatus(..,&po);
代码2:
OVERLAPPED o;
int main()
..
CreateIoCompletionPort(....);
for (int i = 0; i<10; i++)
WriteFile(..,&o);
OVERLAPPED* po;
GetQueuedCompletionStatus(..,&po);
【问题讨论】:
编辑了我的帖子。您可能想再看一遍。 【参考方案1】:好的!这是来自OVERLAPPED 结构的 MSDN 页面的备注部分:
在函数调用中使用该结构之前,该结构的任何未使用成员都应始终初始化为零。否则,函数可能会失败并返回 ERROR_INVALID_PARAMETER。
全局变量是零初始化,而局部变量不是。如果您打算使用以前的代码,则需要将内存清零:
int main()
OVERLAPPED o = 0;
// ...
【讨论】:
在前一个程序中,GetQueuedCompletionStatus() 只是在那里等到时间结束。看来我无法调用 GetLastError()。以上是关于关于windows iocp的一个问题的主要内容,如果未能解决你的问题,请参考以下文章
IOCPT/IOCP - 它只存在于 Windows 中吗? [复制]
使用 IOCP - C++ - Windows 检测子进程的退出/失败