zoukankan      html  css  js  c++  java
  • C#如何判断线程池中所有的线程是否已经完成

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

    //每秒检次一次线程池的状态
    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);
          //此处加入所有线程完成后的处理代码
    
          
                   
                }
                
    
            }
    

      

  • 相关阅读:
    二叉搜索树的第k个结点
    序列化二叉树
    把二叉树打印成多行
    按之字形顺序打印二叉树
    对称的二叉树
    二叉树的下一个结点
    删除链表中重复的结点
    链表中环的入口结点
    字符流中第一个不重复的字符
    基数排序的理解和实现(Java)
  • 原文地址:https://www.cnblogs.com/xiaofengfeng/p/2823339.html
Copyright © 2011-2022 走看看