我在玩 IOCP。我正在尝试编写简单的应用程序来异步从主线程中的文件中读取数据。但是我在 ReadFileEx 函数中遇到错误(ERROR_INVALID_PARAMETER),但似乎我做得很好。我究竟做错了什么?这是我的示例:
#include "stdafx.h"
#include <windows.h>
#include <assert.h>
#include <stdint.h>
VOID CALLBACK ReadCb(DWORD dwErrorCode,DWORD dwNumberOfBytesTransfered,LPOVERLAPPED lpOverlapped)
{
fprintf(stderr,"i was here\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE main_io,file_i;
HANDLE file_handle;
DWORD bytes_recvd;
ULONG_PTR data = 0;
OVERLAPPED overlapped;
LPOVERLAPPED poverlapped = &overlapped;
uint8_t read_data[1024];
DWORD err;
main_io = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,0);
assert(main_io != NULL);
file_handle = CreateFile(L"test.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED, NULL);
assert(file_handle != INVALID_HANDLE_VALUE);
file_i = CreateIoCompletionPort(file_handle,main_io,data,0);
assert(file_i != NULL);
memset(&overlapped,0,sizeof(OVERLAPPED));
err = ReadFileEx(file_handle,(LPVOID)read_data,1024,&overlapped,ReadCb);
fprintf(stderr,"err %d\n",GetLastError());
assert(err != 0);
assert(GetQueuedCompletionStatus(file_i,&bytes_recvd,&data,&poverlapped,INFINITE));
CloseHandle(main_io);
return 0;
}