今天筆者瞭解到,我可以打電話CreateIoCompletionPort()
,然後通過返回HANDLE
到WaitForSingleObject()
:完成端口上的WaitForSingleObject()?
#include <Windows.h>
int main()
{
HANDLE h = CreateIoCompletionPort(INVALID_HANDLE_VALUE, nullptr, 0, 0);
auto bRes = PostQueuedCompletionStatus(h, 1, 2, 0);
if (!bRes) {
abort();
}
auto dwRes = WaitForSingleObject(h, INFINITE);
if (dwRes != WAIT_OBJECT_0){
abort();
}
LPOVERLAPPED pOvr;
DWORD cb;
ULONG_PTR key;
bRes = GetQueuedCompletionStatus(
h, &cb, &key, &pOvr, INFINITE); // <-- returns 1, 2, nullptr
if (!bRes) {
abort();
}
dwRes = WaitForSingleObject(h, INFINITE); // <-- blocks here
return 0;
}
它工作在我的Windows 10盒預期。
這樣的行爲是已知的還是合法的或有記錄的?我無法找到任何有關它的信息。
'dwRes = WaitForSingleObject(h,INFINITE); // < - 塊在這裏 - 真的阻止?你確定 ?只是想知道 – RbMm
是的。在等待狀態和源代碼崩潰轉儲在這裏:https://1drv.ms/f/s!AtyOp6RRifUTuC2CAVzWdFrvZu6w –
是的,在win10真的等待KQUEUE調度頭。但在win8.1中說 - 不。 – RbMm