您的位置:首页 > 编程语言 > C#

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();
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: