PostQueuedCompletionStatus函数
2015-03-13 11:12
411 查看
PostQueuedCompletionStatus函数,向每个工作者线程都发送—个特殊的完成数据包。该函数会指示每个线程都“立即结束并退出”.下面是PostQueuedCompletionStatus函数的定义: BOOL PostQueuedCompletionStatus( HANDLE CompletlonPort, DW0RD dwNumberOfBytesTrlansferred, DWORD dwCompletlonKey, LPOVERLAPPED lpoverlapped, ); 其中,CompletionPort参数指定想向其发送一个完成数据包的完成端口对象。而就dwNumberOfBytesTransferred,dwCompletionKey和lpOverlapped这三个参数来说.每—个都允许我们指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数。这样—来。—个工作者线程收到传递过来的三个GetQueuedCompletionStatus函数参数后,便可根据由这三个参数的某一个设置的特殊值,决定何时应该退出。例如,可用dwCompletionPort参数传递0值,而—个工作者线程会将其解释成中止指令。一旦所有工作者线程都已关闭,便可使用CloseHandle函数,关闭完成端口。最终安全退出程序。 PostQueuedCompletionStatus函数提供了一种方式来与线程池中的所有线程进行通信。如,当用户终止服务应用程序时,我们想要所有线程都完全利索地退出。但是如果各线程还在等待完成端口而又没有已完成的I/O 请求,那么它们将无法被唤醒。 通过为线程池中的每个线程都调用一次PostQueuedCompletionStatus,我们可以将它们都唤醒。每个线程会对GetQueuedCompletionStatus的返回值进行检查,如果发现应用程序正在终止,那么它们就可以进行清理工作并正常地退出。 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
unsigned 僵哥 本版等级: 更多勋章 | #2 得分:24回复于: 2009-05-15 09:02:21 PostQueuedCompletionStatus主要是投递一个任务到完成队列当中,从而使得在等待队列消息的某一个线程收取到.其参与分别与GetQueuedCompletionStauts相对应,从而可以很方便地为在等待完成消息的线程(池)分派任务,而不需要另外再开线程资源.基于这一种特性,还可以把完成端口当成一个高效的队列+线程池.正如1楼说的,如果你是想退出线程的话,也可以通过这种方式投递特定的消息.由于退出消息一个线程只会处理一个(这个逻辑问题应该不用解释),所以如果想让所有业务线程退出,就只需要根据线程数量投递多个退出消息即可. |
相关文章推荐
- PostQueuedCompletionStatus函数的问题
- PostQueuedCompletionStatus函数
- PostQueuedCompletionStatus函数
- PostQueuedCompletionStatus
- Windows API一日一练(60)CreateIoCompletionPort和GetQueuedCompletionStatus函数
- PostQueuedCompletionStatus 与 GetQueuedCompletionStatus
- PostQueuedCompletionStatus 与 GetQueuedCompletionStatus
- PostQueuedCompletionStatus详解
- PostQueuedCompletionStatus
- PostQueuedCompletionStatus 与 GetQueuedCompletionStatus
- PostQueuedCompletionStatus
- GetQueuedCompletionStatus、PostQueuedCompletionStatus的使用
- PostQueuedCompletionStatus
- PostQueuedCompletionStatus 的应用
- PostQueuedCompletionStatus详解
- GetQueuedCompletionStatus函数
- CreateIoCompletionPort和GetQueuedCompletionStatus函数
- GetQueuedCompletionStatus
- 完成端口GetQueuedCompletionStatus返回值的问题
- 完成端口中的GetQueuedCompletionStatus参数的含义