在看boost.asio源码时,看针对window平台的win_iocp_io_service中使用到iocp
接口
HANDLEWINAPICreateIoCompletionPort( _In_HANDLEFileHandle, _In_opt_HANDLEExistingCompletionPort, _In_ULONG_PTRCompletionKey, _In_DWORDNumberOfConcurrentThreads);
CreateIoCompletionPort创建输入/输出 (I/O) 完成端口并将其与指定的文件句柄相关联,或创建尚未与文件句柄关联的 I/O 完成端口,以便稍后关联
FileHandle:打开的文件句柄或 INVALID_HANDLE_VALUE,INVALID_HANDLE_VALUE表示该函数将创建 I/O 完成端口
ExistingCompletionPort :现有 I/O 完成端口或 NULL 的句柄,如果此参数指定现有的 I/O 完成端口,则函数将其与 FileHandle 参数指定的句柄相关联,如果此参数为 NULL,则该函数将创建新的 I/O 完成端口
CompletionKey:指定文件句柄的每个 I/O 完成数据包中包含的每句柄用户定义完成密钥,用来来帮助应用程序跟踪已完成的 I/O 操作
NumberOfConcurrentThreads:操作系统允许并发处理 I/O 完成端口的 I/O 完成数据包的最大线程数
BOOLWINAPIPostQueuedCompletionStatus( _In_HANDLECompletionPort, _In_DWORDdwNumberOfBytesTransferred, _In_ULONG_PTRdwCompletionKey, _In_opt_LPOVERLAPPEDlpOverlapped);
CompletionPort :I/O 完成数据包要发布到的 I/O 完成端口的句柄
dwNumberOfBytesTransferred:要通过 GetQueuedCompletionStatus 函数的 lpNumberOfBytesTransferred 参数返回的值
dwCompletionKey:要通过 GetQueuedCompletionStatus 函数的 lpCompletionKey 参数返回的值
lpOverlapped:要通过 GetQueuedCompletionStatus 函数的 lpOverlapped 参数返回的值
BOOLGetQueuedCompletionStatus( [in] HANDLECompletionPort, LPDWORDlpNumberOfBytesTransferred, [out] PULONG_PTRlpCompletionKey, [out] LPOVERLAPPED*lpOverlapped, [in] DWORDdwMilliseconds);
尝试从指定的 I/O 完成端口取消对 I/O 完成数据包的排队。 如果没有完成数据包排队,函数将等待与完成端口关联的挂起 I/O 操作完成
CompletionPort:完成端口的句柄
lpNumberOfBytesTransferred:指向变量的指针,该变量接收在完成的 I/O 操作中传输的字节数
lpCompletionKey:指向变量的指针,该变量接收与 I/O 操作已完成的文件句柄关联的完成键值。 完成键是在对 CreateIoCompletionPort 的调用中指定的每个文件密钥
lpOverlapped:指向变量的指针,该变量接收在启动完成 I/O 操作时指定的 OVERLAPPED 结构的地址
dwMilliseconds:调用方愿意等待完成数据包出现在完成端口上的毫秒数。 如果完成数据包未在指定时间内显示,则该函数超时,返回 FALSE,并将 *lpOverlapped 设置为 NULL