を返します。非同期呼び出しは、私は非同期でファイルを読むためには、以下のC++のコードを書いた6エラーコード
#define BUF_SIZE 1024
HANDLE hFile;
DWORD NumberOfBytesRead = 0;
BYTE *buf = (BYTE*)malloc(BUF_SIZE*sizeof(BYTE));
OVERLAPPED overlapped;
overlapped.Offset = overlapped.OffsetHigh = 0;
hFile = CreateFile("C:\\Users\\Desktop\\FOO.cpp",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
printf("invalid hfile\n");
int i;
i= ReadFile(hFile,
&buf,
BUF_SIZE,
&NumberOfBytesRead,
&overlapped);
if(!i && GetLastError() != ERROR_IO_PENDING)
printf ("ReadFile failed with error %d.\n", GetLastError());
else
{
WaitForSingleObject(&(overlapped.hEvent), 0);
printf("here it is %d",NumberOfBytesRead);
}
CloseHandle(hFile);
しかし、ReadFile関数の戻り値は0で、最後のエラーが6に等しいです。 誰もが考えているのですかなぜ? 6つのエラーコードは何を言いますか?
ありがとうございます。
適切な初期化を追加するだけです: 'OVERLAPPED overlapped = {};'。 – avakar
また、おそらくあなたは0ではなくINFINITEの時間を待つことを望んでいるでしょう。また、 'NumberOfBytesRead'は待ってから更新されません。GetOverlappedResultを呼び出して取得する必要があります。 – avakar