【发布时间】:2021-05-08 06:30:03
【问题描述】:
试图了解这是如何工作的...我是否必须创建各种线程才能利用 GetOverlappedResultEx 的功能?但是,为什么我不能将 GetOverlappedResult 放在与主线程不同的线程中,以处理 IO 阻塞而不干扰主操作?
GetOverlappedResult 函数
https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getoverlappedresult
检索对指定文件、命名管道或通信设备的重叠操作的结果。要指定超时间隔或等待警报线程,请使用 GetOverlappedResultEx。
https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getoverlappedresultex
在指定的超时间隔内检索对指定文件、命名管道或通信设备的重叠操作的结果。调用线程可以执行警报等待。
https://docs.microsoft.com/en-us/windows/win32/fileio/alertable-i-o
【问题讨论】:
-
你自己做。但是如果您在同一个线程上同时查看多个异步操作,请查看I/O Completion Ports 以了解如何有效地执行此操作。 (虽然最好先在没有 I/O 完成端口的情况下进行实验/学习,只是为了了解发生了什么,然后再将它们添加到组合中。)
-
GetOverlappedResultEx不创建任何线程,而是等待 I/O 完成并返回最终状态
标签: windows winapi visual-c++