作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经有 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/
我已经有 2 年的重叠 IO 工作了,但我将它用于一个新的应用程序并且它向我抛出了这个错误(当我隐藏主窗体时)。 我已经用谷歌搜索了,但我不明白错误的含义以及我应该如何处理它? 有什么想法吗? 我在
我是一名优秀的程序员,十分优秀!