c# ThreadPool 线程池的使用
2010-02-24 14:49
555 查看
using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Threading; using System.IO; namespace ConsoleApplication1 { class CTask{ private static int s_nActiveTasks = 0; private static int s_nTaskNoSeed = 1; public int nTaskNO; public CTask() { nTaskNO = s_nTaskNoSeed++; } public void DoTask(object obj) { Interlocked.Increment(ref s_nActiveTasks); Console.WriteLine("Task: {0} Start", nTaskNO); for (int i=0;i<10;i++) { Console.Write("."); Thread.Sleep (100); } Console.WriteLine("Task:{0} End", nTaskNO); Interlocked.Decrement(ref s_nActiveTasks); } public static int ActiveTaskCount { get { return s_nActiveTasks; } } } class Program { static void Main(string[] args) { int nCount = 10; Thread[] arrThreads = new Thread[nCount]; for (int i = 0; i < nCount; i++) { Console.WriteLine("启动线程{0}.....", i); arrThreads[i] = new Thread(new ThreadStart(fnThreadTest)); arrThreads[i].Start(); } Console.WriteLine("线程启动完毕"); //等待所有工作运行结束 while (true) { int nWorker, nPort; ThreadPool.GetAvailableThreads(out nWorker, out nPort); Console.WriteLine("/r/n 主线程监视: 工作线程数:{0},活跃任务数:{1}",nWorker ,CTask.ActiveTaskCount); if (nWorker>0) break ; Thread.Sleep (1000); } Console.WriteLine("按任意键退出"); Console.Read(); } static void CreateTask() { //将任务加入线程池 ThreadPool.QueueUserWorkItem(new WaitCallback(new CTask().DoTask)); } static void fnThreadTest() { for (int i = 0; i < 100; i++) { CreateTask(); } } } }
相关文章推荐
- C# 多线程编程之线程池的使用 (ThreadPool)
- c# WaitHandle类在线程池ThreadPool(超过64个线程时)中的使用方法
- C#线程(四、线程池ThreadPool)
- 改善C#程序的建议9:使用Task代替ThreadPool和Thread
- 一个线程池(ThreadPool)的使用
- 线程池newFixedThreadPool的使用
- 使用线程池的方法(非TPL)-ThreadPool.QueueUserWorkItem
- WPF使用ThreadPool.QueueUserWorkItem线程池防界面假死
- 使用SPRING中的线程池ThreadPoolTaskExecutor实现JAVA并发
- C#线程池ThreadPool
- C# 线程池ThreadPool的用法,多线程编程
- python线程池(threadpool)模块使用笔记
- 在linux下使用c++线程池threadpool
- python线程池threadpool使用篇
- 在linux下使用c++线程池threadpool
- c# ThreadPool 使用基础一
- 线程池ThreadPool知识碎片和使用经验速记
- 编写高质量代码改善C#程序的157个建议——建议79:使用ThreadPool或BackgroundWorker代替Thread
- [C#]如何使用ThreadPool
- C# 多线程编程(3):线程池ThreadPool