首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重叠的IO和ERROR_IO_INCOMPLETE

重叠的IO和ERROR_IO_INCOMPLETE
EN

Stack Overflow用户
提问于 2010-11-25 11:49:24
回答 1查看 7.1K关注 0票数 4

我已经有两年的重叠IO工作了,但我在一个新的应用程序中使用了它,它把这个错误抛给了我(当我隐藏主窗体时)。

我已经用谷歌搜索过了,但我不明白这个错误是什么意思,我应该如何处理它?

有什么想法吗?

我正在通过NamedPipes使用它,并且在调用GetOverlappedResult之后出现错误

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-25 12:08:36

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

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

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

代码语言:javascript
复制
BOOL fSuccess = GetOverlappedResult(data->hPipe, &data->oOverlap, &cbRet, TRUE);

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

轮询是否完成:如果操作仍在进行中,您可以从函数返回,并在等待结果的同时执行其他工作:

代码语言:javascript
复制
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 */
}

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4273594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档