关于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 检测子进程的退出/失败

将 SSL 添加到基于 IOCP 的 Windows 服务器的最简单方法是啥?

Windows完成端口 IOCP模型

DIOCP DIOCP常见问题。

一种 Windows IOCP 整合 OpenSSL 实现方案