文档详情

C_实用教程[郑阿奇主编][电子教案] 第九章.ppt

发布:2016-09-24约1.61万字共45页下载文档
文本预览下载声明
1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 1.1 C#的优势 9.4 线程池和定时器 在多线程的程序中,经常会出现两种情况。第一种情况是,应用程序中的线程把大部分时间花费在等待状态,等待某个事件发生,然后才能给予响应;第二种情况则是,线程平常都处于休眠状态,只是周期性地被唤醒。在.net framework里面,我们使用ThreadPool来应对第一种情况,使用Timer来应对第二种情况。 9.4.1 线程池 ThreadPool类提供一个由系统维护的线程池——可以看作一个线程的容器,因为其中某些方法调用了只有高版本Windows才有的API函数,所以该容器需要Windows 2000以上版本的系统支持。可以使用ThreadPool.QueueUserWorkItem()方法将线程安放在线程池里,该方法的原型如下: public static bool QueueUserWorkItem(WaitCallback); 重载的方法如下,参数object将传递给WaitCallback所代表的方法。注意:ThreadPool类也是一个静态类,用户不能也不必生成它的对象,而且一旦使用该方法在线程池中添加了一个项目,那么该项目无法取消。这里用户无须自己建立线程,只需把要做的工作写成函数,作为参数传递给ThreadPool.QueueUserWorkItem()方法,传递的方法就是依靠WaitCallback代理对象,而线程的建立、管理、运行等工作都是由系统自动完成的,用户无须考虑复杂的细节问题,线程池的优点也就体现在这里,就像公司老板——只需安排工作,不必亲自动手。 public static bool QueueUserWorkItem(WaitCallback, object); 注意:ThreadPool类也是一个静态类,用户不能也不必生成它的对象,而且一旦使用该方法在线程池中添加了一个项目,那么该项目无法取消。这里用户无须自己建立线程,只需把要做的工作写成函数,作为参数传递给ThreadPool.QueueUserWorkItem()方法,传递的方法就是依靠WaitCallback代理对象,而线程的建立、管理、运行等工作都是由系统自动完成的,用户无须考虑复杂的细节问题,线程池的优点也就体现在这里,就像公司老板——只需安排工作,不必亲自动手。 9.4.2 定时器 与ThreadPool类不同,Timer类的作用是设置一个定时器,定时执行用户指定的函数,而这个函数的传递是靠另外一个代理对象TimerCallback,它必须在创建Timer对象时就指定,并且不能更改。定时器启动后,系统将自动建立一个新线程,并在这个线程里执行用户指定的函数。下面的语句初始化一个Timer对象: Timer timer = new Timer(timerDelegate, s,1000, 1000); 第1个参数指定TimerCallback代理对象;第2个参数的意义跟上面提到的WaitCallback代理对象一样,作为一个对象传递给要调用的方法;第3个参数是延迟时间——计时开始的时刻距现在的时间,单位是毫秒;第4个参数是定时器的时间间隔——计时开始以后,每隔相同的一段时间,TimerCallback所代表的方法被调用一次,单位也是毫秒。上面语句的意思就是将定时器的延迟时间和时间间隔都设为1秒钟。 定时器的设置是可以改变的,调用Timer.Change()方法即可,这是一个参数类型重载的方法,一般使用的原型如下: public bool Change(long, long); 下面这行代码将前边设置的定时器修改了一下: timer.Change(10000,2000); 显然,定时器timer的时间间隔被重新设置为2秒,停止计时10秒后生效。 上面就是对ThreadPool和Timer两个类的简单介绍,充分利用系统提供的功能可以节省很多时间和精力——特别是对容易出错的多线程程序。同时我们也可以看到.net Fra
显示全部
相似文档