OVERLAPPED结构的定义为
typedef struct _OVERLAPPED {
ULONG_PTR Internal;
ULONG_PTR InternalHigh;
union {
struct {
DWORD Offset;
DWORD OffsetHigh;
};
PVOID Pointer;
};
HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;
MSDN中,Internal、InternalHigh、Pointer均标记为“Reserved for system use”,hEvent只能是0或者CreateEvent创建的合法的Event。那么问题来了,C语言没有继承,GetQueuedCompletionStatus函数得到OVERLAPPED指针后,怎么获取关联的数据?
举个例子
char buffer[4 * 1024];
{
HANDLE hFile = CreateFileW(L"d:\1.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
OVERLAPPED* op = (OVERLAPPED*)malloc(sizeof(OVERLAPPED));
ReadFileEx(hFile, buffer, sizeof(buffer), op, NULL);
}
{
DWORD dwNumberOfBytes = 0;
ULONG_PTR key = 0;
OVERLAPPED* op = NULL;
GetQueuedCompletionStatus(hCompletionPort, &dwNumberOfBytes, &key, &op, INFINITE);
}
异步读操作完成,并在GetQueuedCompletionStatus处得到OVERLAPPED*,怎么知道读取的是哪个文件的内容呢?