下面是创建IO完成端口的函数
//创建一个IO完成端口
HANDLE CreateNewCompletionPort(DWORD NumberOfConcurrentThreads )
{
return ( CreateIoCompletionPort(INVALID_HANDLE_VALUE,
NULL,0, NumberOfConcurrentThreads ));
}
//将设备与IO端口关联起来
BOOL AssociateDeviceWithCompletionPort(HANDLE hCompletionPort, HANDLE hDevice,
DWORD dwCompletionKey)
{
//参数2不为NULL,那么参数4忽略
HANDLE h = CreateIoCompletionPort(hDevice, hCompletionPort,dwCompletionKey,0);
return (h == hCompletionPort);
}
IO完成端口有5个基础的数据结构:
1 设备列表 包含关联的设备
2 IO完成队列(先入先出)IO请求完成,或者Post一个IO完成请求
3 以释放线程 (后入先出)从等待线程唤醒处理IO完成请求,或者暂停的线程被唤醒
4 以等待线程 已经释放的线程如果等待了,那么进入等待线程列表
5 以暂停线