18,356
社区成员
发帖
与我相关
我的任务
分享
OVERLAPPED ol;
GetQueuedCompletionStatus(NULL,NULL,NULL,(LPOVERLAPPED*)&(ol),INFINITE);
__out LPDWORD lpNumberOfBytes,
__out PULONG_PTR lpCompletionKey,
__out LPOVERLAPPED *lpOverlapped,
#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
//有如下结构
struct IOCPContext
{
int i;
int j;
OVERLAPPED ol;
...
};
//使用
IOCPContext ic; //这个要是全局或者动态分配的地址空间
PostQueuedCompletionStatus(hCompletionPort, dwNumberOfBytesTransferred, dwCompletionKey, &ic.ol);
//获取
LPOVERLAPPED lpol;
GetQueuedCompletionStatus(hIocp, &dwBytes, NULL, &lpol, INFINITE);
//这时候可以通过地址运算从lpol获取你传入的ic结构的地址,具体有个OFFSETOF宏好像;