我已经有两年的重叠IO工作了,但我在一个新的应用程序中使用了它,它把这个错误抛给了我(当我隐藏主窗体时)。
我已经用谷歌搜索过了,但我不明白这个错误是什么意思,我应该如何处理它?
有什么想法吗?
我正在通过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发布于 2010-11-25 12:08:36
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 */
}通常,第二种方法比第一种方法更可取,因为它不会导致应用程序停止并等待结果。(但是,如果代码在单独的线程上运行,则第一个选项可能更可取。)
https://stackoverflow.com/questions/4273594
复制相似问题