博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# ThreadPoold使用心得
阅读量:4566 次
发布时间:2019-06-08

本文共 1658 字,大约阅读时间需要 5 分钟。

于c#多线程编程经常使用的线程,但是,因为线程的创建和销毁是非常资源 - 成本非常大。因此,我们使用线程池来解决问题,

在线程池的开始是申请一定数量的线程系统。和维护,有任务时间,假设你有空闲的线程,如果您分配一个线程来运行它。假设没有备用线程必须等待。

当线程运行完任务后,就归还给空暇线程。

配置线程池的一些參数

RegisteredWaitHandle rhw;        public void begin()        {            //ThreadPool.QueueUserWorkItem(new WaitCallback(CountProcess));            //检查线程是否结束            ThreadPool.SetMaxThreads(10, 10);            ThreadPool.SetMinThreads(2, 2);            rhw = ThreadPool.RegisterWaitForSingleObject(new AutoResetEvent(false), this.CheckThreadPool, null, 1000, false);        }
这种方法是加入一个任务
ThreadPool.QueueUserWorkItem(new WaitCallback(test),obj);
public void test(Object n)        {            for (int i = 0; i < int.Parse(n.ToString()); i++)            {                Thread.Sleep(1000);            }            AddMessage(Thread.CurrentThread.Name + " 结束! 运行參数为:"+n);        }

我们须要推断线程池是否运行结束。就要推断最大线程数和空暇线程数是否同样,假设同样表示如今没有任务运行,因此任务运行完毕

//检查线程池的方法        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);                //此处增加全部线程完毕后的处理代码                AddMessage("全部线程结束!");            }        }

上面简单的介邵起来 C#于 ThreadPool基本用法

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/blfshiye/p/4842509.html

你可能感兴趣的文章
题目831-签到-nyoj-20140818
查看>>
百词斩-斩家秘籍
查看>>
php反射
查看>>
hdu 1018 Big Number 数学结论
查看>>
【MUI】百度地图定位功能
查看>>
bzoj3687 简单题
查看>>
STL容器简介
查看>>
HashMap遍历的两种方式,推荐使用entrySet()
查看>>
如何在Android开发中测试应用在真机上实验
查看>>
传奇代码研究 极品机率...
查看>>
mysql存储过程和定时调用
查看>>
(转)park1.0.0生态圈一览
查看>>
需要学习双拼了
查看>>
字符串和数组使用时该注意的一些地方
查看>>
我们的故事墙--一切为了可视化
查看>>
进程与线程的区别?-转
查看>>
php array_walk
查看>>
yolo train:CUDA Error: an illegal memory access was encountered darknet: cuda.c:36:check_error
查看>>
java中作用域public private protected 以及不写的区别
查看>>
Ubuntu 安装java 1.8
查看>>