S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

CAll QueueUserWorkItem Function 2

Posted on 2009-04-19 21:53 S.l.e!ep.¢% 阅读(797) 评论(0)  编辑 收藏 引用 所属分类: MulThreads
CAll QueueUserWorkItem Function

当第一次调用 QueueUserWorkItem 时, Windows将创建一个线程池,其中的一个线程将执行 Function 函数,函数执行完成后,该线程返回线程池,等待新的任务。由于 Windows 依赖于该过程来完成线程池的功能,因此 Function 中不能有任何中止该线程的调用,如 ExitThread。 假如当调用 QueueUserWorkItem 时,没有可用的线程,Windows 就可以通过创建额外的线程增加线程池中线程的数量。线程池中的线程的数量是动态的,并且受 Windows 的控制,Windows 内部的调度算法决定处理当前线程工作负载的最佳方式。

如果知道所要处理的工作需要很长时间才能完成,可以在调用 QueueUserWorkItem 时,将参数的 Flags 设置为 WT_EXECUTELONGFUNCTION ,这时如果线程池中的所有的线程都处于忙状态, 那么 Windows 将自动创建新的线程。

Windows 线程池中的线程有两种类型,一种可以用来处理异步I/O, 另一种则不能。前者依赖于IO完成端口,IOCP是一种Windows内核对象,它可以将线程和I/O端口绑定在特定的系统资源上,对带有完成端口的I/O进行处理是一个复杂的过程。

调用 QueueUserWorkItem 时,需要标识哪些线程执行I/O,哪些线程不执行I/O, 将 QueueUserWorkItem 中的 Flags 设置成 WT_EXECUTIONDEFAULT, 就可以告诉线程池该线程不执行异步I/O,从而可以对其进行相应的管理;对于执行异步I/O的线程,则应该将其 Flags 设置为 WT_EXECUTEIONIOTHREAD.


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理