我已经将重叠的IO工作了2年了,但是我已经将它与新的应用程序一起使用了,并且把这个错误告诉了我(当我隐藏主窗体时)。
我用谷歌搜索但我不明白错误的含义以及我应该如何处理它?</ 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
答案 0 :(得分:6)
ERROR_IO_INCOMPLETE
是一个错误代码,表示重叠操作仍在进行中;由于操作尚未成功,GetOverlappedResult
返回false。
您有两种选择 - 阻止和非阻止:
阻止操作完成:将您的GetOverlappedResult
电话更改为:
BOOL fSuccess = GetOverlappedResult(data->hPipe, &data->oOverlap, &cbRet, TRUE);
这可确保在返回结果之前已完成重叠操作(即成功或失败)。
轮询完成:如果操作仍在进行中,您可以从该功能返回,并在等待结果时执行其他工作:
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 */
}
通常,第二个选项比第一个选项更好,因为它不会导致应用程序停止并等待结果。 (但是,如果代码在单独的线程上运行,则第一个选项可能更可取。)