码迷,mamicode.com
首页 > 编程语言 > 详细

C#如何判断线程池中所有的线程是否已经完成(转)

时间:2014-06-07 23:34:42      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

其 实很简单用ThreadPool.RegisterWaitForSingleObject方法注册一个定时检查线程池的方法,在检查线程的方法内调用 ThreadPool.GetAvailableThreads与ThreadPool.GetMaxThreads并比较两个方法返回的值是不是相等, 相等表示线池内所有的线程已经完成.

bubuko.com,布布扣
//每秒检次一次线程池的状态
RegisteredWaitHandle rhw = ThreadPool.RegisterWaitForSingleObject(AutoResetEvent(false), this.CheckThreadPool, null, 1000, false);
 
 
   //检查线程池的方法
       private void CheckThreadPool(object state, bool timeout)
        {
            int workerThreads = 0;
            int maxWordThreads = 0;
            //int 
            int compleThreads = 0;
            ThreadPool.GetAvailableThreads(out workerThreads, out compleThreads);
            ThreadPool.GetMaxThreads(out maxWordThreads, out compleThreads);
            //当可用的线数与池程池最大的线程相等时表示线程池中所有的线程已经完成
            if (workerThreads == maxWordThreads)
            {
                //当执行此方法后CheckThreadPool将不再执行
                rhw.Unregister(null);
      //此处加入所有线程完成后的处理代码
 
      
                
            }
             
 
        }
bubuko.com,布布扣

 

C#如何判断线程池中所有的线程是否已经完成(转),布布扣,bubuko.com

C#如何判断线程池中所有的线程是否已经完成(转)

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/rainbowzc/p/3774717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!