gpt4 book ai didi

c++ - 重叠 IO 和 ERROR_IO_INCOMPLETE

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:20 25 4
gpt4 key购买 nike

我已经有 2 年的重叠 IO 工作了,但我将它用于一个新的应用程序并且它向我抛出了这个错误(当我隐藏主窗体时)。

我已经用谷歌搜索了,但我不明白错误的含义以及我应该如何处理它?<​​/p>

有什么想法吗?

我在 NamedPipes 上使用它,错误发生在调用 GetOverlappedResult 之后

DWORD dwWait = WaitForMultipleObjects(getNumEvents(), m_hEventsArr, FALSE, 500);

//check result. Get correct data

BOOL fSuccess = GetOverlappedResult(data->hPipe, &data->oOverlap, &cbRet, FALSE);

// error happens here

最佳答案

ERROR_IO_INCOMPLETE 是一个错误代码,表示 Overlapped 操作仍在进行中; GetOverlappedResult 返回 false,因为操作尚未成功。

您有两个选择 - 阻塞和非阻塞:

阻塞直到操作完成:将您的 GetOverlappedResult 调用更改为:

BOOL fSuccess = GetOverlappedResult(data->hPipe, &data->oOverlap, &cbRet, TRUE);

这确保重叠操作在返回结果之前已经完成(即成功或失败)。

Poll for completion:如果操作还在进行中,可以从函数返回,在等待结果的同时进行其他工作:

BOOL fSuccess = GetOverlappedResult(data->hPipe, &data->oOverlap, &cbRet, FALSE);
if (!fSuccess) {
if (GetLastError() == ERROR_IO_INCOMPLETE) return; // operation still in progress

/* handle error */
} else {
/* handle success */
}

通常,第二个选项优于第一个,因为它不会导致您的应用程序停止并等待结果。 (但是,如果代码在单独的线程上运行,则第一个选项可能更可取。)

关于c++ - 重叠 IO 和 ERROR_IO_INCOMPLETE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4273594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com