网站大量收购独家精品文档,联系QQ:2885784924

C#多线程编程介绍——使用thread、threadpool、timer.doc

C#多线程编程介绍——使用thread、threadpool、timer.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C#多线程编程介绍——使用thread、threadpool、timer.doc

C#多线程编程介绍——使用thread、threadpool、timer 在system.threading 命名空间提供一些使得能进行多线程编程的类和接口,其中线程的创建有以下三种方法:thread、threadpool、timer。下面我就他们的使用方法逐个作一简单介绍。 1. thread 这也许是最复杂的方法,但他提供了对线程的各种灵活控制。首先你必须使用他的构造函数创建一个线程实例,他的参数比较简单,只有一个threadstart 委托: public thread(threadstart start); 然后调用start()启动他,当然你能利用他的priority属性来设置或获得他的运行优先级(enum threadpriority: normal、 lowest、 highest、 belownormal、 abovenormal)。 见下例:他首先生成了两个线程实例t1和t2,然后分别设置他们的优先级,接着启动两线程(两线程基本相同,只不过他们输出不相同,t1为“1”,t2为“2”,根据他们各自输出字符个数比可大致看出他们占用cpu时间之比,这也反映出了他们各自的优先级)。 static void main(string[] args) { thread t1 = new thread(new threadstart(thread1)); thread t2 = new thread(new threadstart(thread2)); t1.priority = threadpriority.belownormal ; t2.priority = threadpriority.lowest ; t1.start(); t2.start(); } public static void thread1() { for (int i = 1; i 1000; i++) {//每运行一个循环就写一个“1” dosth(); console.write(1); } } public static void thread2() { for (int i = 0; i 1000; i++) {//每运行一个循环就写一个“2” dosth(); console.write(2); } } public static void dosth() {//用来模拟复杂运算 for (int j = 0; j j++) { int a=15; a = a*a*a*a; } } 以上程式运行结果为: 11111111111111111111111111111111111111111121111111111111111111111111111111111111111112 11111111111111111111111111111111111111111121111111111111111111111111111111111111111112 11111111111111111111111111111111111111111121111111111111111111111111111111111111111112 从以上结果我们能看出,t1线程所占用cpu的时间远比t2的多,这是因为t1的优先级比t2的高,若我们把t1和t2的优先级都设为normal,那结果是怎么?他们所占用的cpu时间会相同吗?是的,正如你所料,见下图: 121211221212121212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121212121212121212121212121212121212 从上例我们可看出,他的构造类似于win32的工作线程,但更加简单,只需把线程要调用的函数作为委托,然后把委托作为参数构造线程实例即可。当调用start()启动后,便会调用相应的函数,从那函数第一行开始执行。 接下来我们结合线程的threadstate属性来了解线程的控制。 threadstate是个枚举类型,他反映的是线程所处的状态。 当一个thread实例刚创建时,他的threadstate是unstarted;当此线程被调用start()启动之后,他的threadstate是 running; 在此线程启动之后,如果想让他暂停(阻塞),能调用thread.sleep() 方法,他有两个重载方法(sleep(int )、sleep(timespan )),只不过是表示时间量的格

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档