私が制御できないこのコードは、重複した I/O を使用してファイルを読み取ります。
// Read file asynchronously
HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...);
BYTE buffer[10];
OVERLAPPED oRead = { 0 };
ReadFile(hFile, buffer, 10, NULL, &oRead);
// Do work while file is being read
...
// Wait for read to finish
WaitForSingleObject(hFile, INFINITE);
// ReadFile has finished
// buffer now contains data which can be used
...
別のスレッド (実際には ReadFile の API フック) で、hFile
ブロックを解除するために にシグナルを送る必要がありWaitForSingleObject
ます。通常、Windows (または を処理するデバイス ドライバーReadFile
) がこれを行いますが、シミュレートする必要があります。
、 、およびhFile
を含むReleaseMutex
、通常これを行う API は見つかりませんでした。それらはすべてエラー 6 を返します (ハンドルが無効です)。ファイル、名前付きパイプ、または通信デバイスで動作する API はありますか?ReleaseSemaphore
SetEvent
推奨されていないことはわかっていWaitForSingleObject(hFile)
ますが、上記のコードは与えられたものであり、それを使用する必要があります。ありがとう!