THREADSPOOL
STPStartInfo stp = new STPStartInfo();//线程详细配置参数
stp.CallToPostExecute = CallToPostExecute.Always;//在这里选择总是回调
//当工作项执行完成后,是否释放工作项的参数,如果释放,参数对象必须实现IDisposable接口
stp.DisposeOfStateObjects = true;
//当线程池中没有工作项时,闲置的线程等待时间,超过这个时间后,会释放掉这个闲置的线程,默认为60秒
// stp.IdleTimeout = 300;//300s
//最大线程数,默认为25,
//注意,由于windows的机制,所以一般最大线程最大设置成25,
//如果设置成0的话,那么线程池将停止运行
stp.MaxWorkerThreads = ;//15 thread
//只在STP执行Action<...>与Func<...>两种任务时有效
//在执行工作项的过程中,是否把参数传递到WorkItem中去,用做IWorkItemResult接口取State时使用,
//如果设置为false那么IWorkItemResult.State是取不到值的
//如果设置为true可以取到传入参数的数组
stp.FillStateWithArgs = true; //当工作项执行完毕后,默认的回调方法
stp.PostExecuteWorkItemCallback = delegate(IWorkItemResult wir) { this.BeginInvoke(updateTxt, "-----------------ok" + wir.Result + "\r\n"); };
//是否需要等待start方法后再执行工作项,?默认为true,当true状态时,STP必须执行Start方法,才会为线程分配工作项
stp.StartSuspended = true; stp.AreThreadsBackground = true; m_hThreadPool = new SmartThreadPool(stp);//声明一个线程池 foreach (int state in abc)
{ //IWorkItemResult<int> resultCallback = m_hThreadPool.QueueWorkItem(new Amib.Threading.Func<int, int>(IntDoSomeWork), state);
//m_hThreadPool.QueueWorkItem( (obj) =>
// {
// Thread.Sleep(3000);
// this.BeginInvoke(updateTxt, "正在执行" + state.ToString() + "\r\n");
// string str = "正在执行" + state.ToString() + "\r\n";
// return state * state;
// }, state);
//this.BeginInvoke(updateTxt, resultCallback.Result.ToString() + "\r\n");
}
m_hThreadPool.Start();
m_hThreadPool.WaitForIdle();//等待该实例下的所有结果返回
//MessageBox.Show(resultCallback.Result.ToString());
m_hThreadPool.Shutdown();
THREADSPOOL的更多相关文章
- JAVA线程池的分析和使用
1. 引言 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行.第三:提 ...
- [转]ThreadPoolExecutor线程池的分析和使用
1. 引言 合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 第 ...
- Python:怎样用线程将任务并行化?
如果待处理任务满足: 可拆分,即任务可以被拆分为多个子任务,或任务是多个相同的任务的集合: 任务不是CPU密集型的,如任务涉及到较多IO操作(如文件读取和网络数据处理) 则使用多线程将任务并行运行,能 ...
- 理解线程池到走进dubbo源码
引言 合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. ...
- JAVA线程池的实际运用
线程池的创建 我们可以通过ThreadPoolExecutor来创建一个线程池 /** * @param corePoolSize 线程池基本大小,核心线程池大小,活动线程小于corePoolSize ...
- Java集合及concurrent并发包总结(转)
Java集合及concurrent并发包总结(转) 1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Valu ...
- Java线程池ThreadPoolExecutor
线程池的好处 1. 降低资源的消耗 通过重复利用已创建的线程降低线程创建和销毁所造成的消耗 2. 提高响应速度 当任务到达时,任务可以不需要等到线程创建就能立即执行 3. 提高线程的可管理型 线程是稀 ...
- Java线程池(ThreadPoolExecutor)原理分析与使用
在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...
- Java并发(四)线程池使用
上一篇博文介绍了线程池的实现原理,现在介绍如何使用线程池. 目录 一.创建线程池 二.向线程池提交任务 三.关闭线程池 四.合理配置线程池 五.线程池的监控 线程池创建规范 一.创建线程池 我们可以通 ...
随机推荐
- myeclipse8.6首次运行maven项目的问题解决
myeclipse8.6导入maven项目后识别为普通java项目,即项目图标上没有小M的标识.这时是无法直接运行的. 解决方法:1,打开Window --> perferences,找到mye ...
- sharememory.c
//进程通信,共享存储区 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #i ...
- 深度学习教程Deep Learning Tutorials
Deep Learning Tutorials Deep Learning is a new area of Machine Learning research, which has been int ...
- Python学习(四)数据结构 —— list tuple range
序列类型 list tuple range list 和 tuple list: 列表,由 [] 标识: 有序:可改变列表元素 tuple: 元组,由 () 标识: 有序:不可改变元组元素(和 ...
- Delphi第三方组件安装DCU.PAS.DPK.BPL.ActiveX控件
不是由BORLAND提供的组件叫第三方组件:安装方法:南山古桃(nsgtao)首先提醒一下:最好把要安装的文件先复制到Delphi安装目录的Lib目录下再执行下面的操作!就目前常见的各种形式的组件的安 ...
- webapp开发基础
1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用 <meta content="width=device-wid ...
- 【cocos2d-x 3.7 飞机大战】 决战南海I (七) 控制器的实现
控制器中的功能并不多,主要是以下这些 //对玩家分数的操作 CC_SYNTHESIZE_READONLY(SaveData *, m_saveData, SaveData); void update( ...
- docker桥接
Ifconfig docker0 down Brctl delvr docker0 进入到网卡配置文件 修改eth0网卡参数 加入BIRDGE=br0 创建一个br0 其中ip为真实机的ip 更改do ...
- ArcGIS Add-In调试无法重新生成
在调试ArcGIS Add-In时,出现错误:无法注册程序集"……\Projects\ArcGISAddIn\ArcGISAddIn\bin\Debug\ArcGISAddIn.dll&qu ...
- angularjs中ng-class的使用
1.方法一 通过数据的双向绑定(不推荐) <!DOCTYPE html> <html ng-app="myApp"> <head> <me ...