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);
          //此处加入所有线程完成后的处理代码
    
          
                   
                }
                
    
            }
    

      

  • 相关阅读:
    React class & function component 的区别
    Webpack 4 + React + Typescript 搭建启动模版
    JavaScript的数据类型及其检测
    react SyntheticEvent 合成事件机制
    数组的排序
    Ajax 和 Ajax的封装
    go 结构的方法总结
    go 结构的方法2
    go struct 的方法1
    go 函数闭包
  • 原文地址:https://www.cnblogs.com/xiaofengfeng/p/2823339.html
Copyright © 2011-2022 走看看