CreateThreadpoolIo 函数小记
函数原型如下:
PTP_IO WINAPI CreateThreadpoolIo(
_In_ HANDLE fl,
_In_ PTP_WIN32_IO_CALLBACK pfnio,
_Inout_opt_ PVOID pv,
_In_opt_ PTP_CALLBACK_ENVIRON pcbe
);
第一个参数表示要绑定到线程池内部IO完成端口的设备;有两点要注意。
第一点 还记得创建完成端口的函数么,它有两个功能,一是创建一个新的完成端口,二是将一个设备绑定到一个完成端口上面,而此函数并没有完成第二个功能,即,它并没有将第一个参数(即设备句柄)绑定到线程池内部IO完成端口上,它只是说,如果要将设备绑定到线程池内部的IO完成端口,就得以这样的形式来创建一个“对象”,这个“对象”里面包含着要绑定到线程池内部IO完成端口的设备;只有调用了下面的StartThreadpoolIo()函数后,才是将“对象”中的设备绑定到线程池内部IO完成端口上
第二点 还记得完成端口可以绑定多个设备么,所以,如果要将多个设备(多个异步SOCKET)绑定到线程池内部IO完成端口上面,就要多次调用这个函数来创建这种“对象”,“对象”中包含一个要绑定到线程池内部IO完成端口的设备