c++ - 关于windows iocp的一个问题

标签 c++ windows visual-c++ iocp

当我在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);
    }


}

最佳答案

好的!这是来自OVERLAPPED结构的 MSDN 页面的备注部分:

Any unused members of this structure should always be initialized to zero before the structure is used in a function call. Otherwise, the function may fail and return ERROR_INVALID_PARAMETER.

全局变量是零初始化,而局部变量不是。如果您打算使用以前的代码,则需要将内存清零:

int main() {
    OVERLAPPED o = {0}; 
    // ...

关于c++ - 关于windows iocp的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/830639/

相关文章:

c++ - 如何保存这个 vector 图

Windows 在管理员重置 PATH 时运行。

c++ - 如何将正则表达式中组的每次迭代作为单独的组?

c++ - 带有预分配缓冲区的循环缓冲区?

windows - 无法使用 Windows 的 OpenSSL 支持交叉编译 cURL

python - 遍历不终止的批处理脚本

visual-c++ - 如何在 VC++ 6.0 中自动链接调试/发布库?

c++ - 我是否需要在头文件和源文件中指定调用约定

c++ - 如何处理坏指针

c++ - 我可以确定 vector 包含对象而不是指向对象的指针吗?