今日、私はCreateIoCompletionPort()
を呼び出してから、WaitForSingleObject()
に戻っHANDLE
を渡すことができることを学びました:完了ポートの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