WEB开发网
开发学院软件开发C语言 C#多线程编程(3):线程池ThreadPool 阅读

C#多线程编程(3):线程池ThreadPool

 2010-09-30 21:09:33 来源:WEB开发网   
核心提示: 3、线程池会根据当前系统特点对池内的线程进行优化处理,总之使用线程池的作用就是减少创建和销毁线程的系统开销,C#多线程编程(3):线程池ThreadPool(2),在.NET中有一个线程的类ThreadPool,它提供了线程池的管理,下面是一个ThreadPool的例子,代码如下:usingSy

3、线程池会根据当前系统特点对池内的线程进行优化处理。

总之使用线程池的作用就是减少创建和销毁线程的系统开销。在.NET中有一个线程的类ThreadPool,它提供了线程池的管理。

ThreadPool是一个静态类,它没有构造函数,对外提供的函数也全部是静态的。其中有一个QueueUserWorkItem方法,它有两种重载形式,如下:

public static bool QueueUserWorkItem(WaitCallback callBack):将方法排入队列以便执行。此方法在有线程池线程变得可用时执行。

public static bool QueueUserWorkItem(WaitCallback callBack,Object state):将方法排入队列以便执行,并指定包含该方法所用数据的对象。此方法在有线程池线程变得可用时执行。

QueueUserWorkItem方法中使用的的WaitCallback参数表示一个delegate,它的声明如下:

public delegate void WaitCallback(Object state)

如果需要传递任务信息可以利用WaitCallback中的state参数,类似于ParameterizedThreadStart委托。

下面是一个ThreadPool的例子,代码如下:

using System.Threading;
using System.Collections;
using System.Diagnostics;
using System;
using System.ComponentModel;
namespace ThreadPoolDemo
{
        class ThreadPoolDemo1
        {
                public ThreadPoolDemo1()
                {
                }
                public void Work()
                {
                        ThreadPool.QueueUserWorkItem(new WaitCallback(CountProcess));
                        ThreadPool.QueueUserWorkItem(new WaitCallback(GetEnvironmentVariables));
                }
                /// <summary>
                /// 统计当前正在运行的系统进程信息
                /// </summary>
                /// <param name="state"></param>
                private void CountProcess(object state)
                {
                        Process[] processes = Process.GetProcesses();
                        foreach (Process p in processes)
                        {
                                try
                                {
                                        Console.WriteLine("Id:{0},ProcessName:{1},StartTime:{2}", p.Id, p.ProcessName, p.StartTime);
                                }
                                catch (Win32Exception e)
                                {
                                        Console.WriteLine("ProcessName:{0}", p.ProcessName);
                                }
                                finally
                                {
                                }
                        }
                        Console.WriteLine("获取进程信息完毕。");
                }
                /// <summary>
                /// 获取当前机器系统变量设置
                /// </summary>
                /// <param name="state"></param>
                public void GetEnvironmentVariables(object state)
                {
                        IDictionary list=System.Environment.GetEnvironmentVariables();
                        foreach (DictionaryEntry item in list)
                        {
                                Console.WriteLine("key={0},value={1}", item.Key, item.Value);
                        }
                        Console.WriteLine("获取系统变量信息完毕。");
                }
  static void Main(string[] args)
                {
                        ThreadPoolDemo1 tpd1 = new ThreadPoolDemo1();
                        tpd1.Work();
                        Thread.Sleep(5000);
                        Console.WriteLine("OK");
                        Console.ReadLine();
                }
        }
}

上一页  1 2 3 4  下一页

Tags:线程 编程 线程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接