0

WaitForMultipleObjects() を使用して複数の非同期 ReadFile() の完了を待機しようとしていますが、常にすぐに戻り、バイトは読み取られていません。一方、GetOverlappedResult() は常に成功します。何が間違っていたのかわかりません。

以下のコード ブロックで、非同期の ReadFile() を 1 つだけ使用してこれをテストしています。

events = (HANDLE *)malloc(sizeof(HANDLE));
buffer = (BYTE*)malloc(BufferSize*sizeof(BYTE));
memset(buffer, 0, BufferSize*sizeof(BYTE));
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (!hEvent){
    printf("can't create event\n");
    return 0;
}

memset(&testOv, 0, sizeof(testOv));
testOv.hEvent = hEvent; //event to use with waitformultipleobject()
testFile = CreateFile(SrcDst[0][0], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if (INVALID_HANDLE_VALUE==testFile) 
{
printf("Unable to open file %s.  Error=%d\n",SrcDst[0][0], GetLastError());
return 0;
}

events[0] = testOv.hEvent; 

RF = ReadFile(testFile, buffer, 25, &byteRead, &testOv);

//WaitForMultipleObjects(1, events, TRUE, INFINITE); return before any byte is read
//WaitForSingleObject(testFile, INFINITE); waiting indefinitely

GetOverlappedResult(testFile, &testOv, &byteRead, TRUE);

for (i = 0; i < byteRead; i++){
    printf("%c", (char)buffer[i]);
}

printf("byteRead: %d\n", byteRead);
printf("error: %d\n", GetLastError());
4

0 に答える 0