- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 )),只不过是表示时间量的格
您可能关注的文档
最近下载
- 2025中信银行信用卡中心银川分中心招聘笔试备考试题及答案解析.docx
- 2025年金华职业技术学院单招职业倾向性测试题库及参考答案.docx VIP
- 武汉市2025届高中毕业生四月调研考试(四调)数学试卷(含答案).pdf
- 陕西西安市长安城乡建设开发公司招聘笔试题库2024.pdf VIP
- MEMS传感器和智能传感器的发展.docx VIP
- 中学英语课堂教育教学评价策略的研究结题报告.docx
- 运筹学(中国人民解放军陆军工程大学)中国大学MOOC慕课章节测验答案.pdf
- 内蒙古风能、太阳能资源.doc VIP
- 金丽衢十二校2024学年2025届高三第二次联考生物试卷(含答案).pdf
- 《中医骨伤科学》课件—— 肘关节脱位.pptx VIP
文档评论(0)