欢迎来到天天文库
浏览记录
ID:41037126
大小:48.00 KB
页数:9页
时间:2019-08-14
《C#中的多线程编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C#中的多线程编程C#是.Net平台的通用开发工具,它能够建造所有的.Net应用。在.Net中所有线程都运行在应用程序域(AppDomain)中,这也许让你想到Win32进程,实际上它们还是有很大的不同。应用程序域提供了一种安全而通用的处理单元,公共语言运行库可使用它来隔离应用程序。注意在.Net中应用程序的隔离是应用程序域而不是进程,在单个进程中可以存在几个应用程序域,而且线程可以跨越应用程序域的范围,某个线程中的方法可以调用另一个线程的方法,这样的话就不会造成进程间调用或进程间切换等方面的额外开销。可以说应用程序域是物理进程(也即win32中的Process)内的逻辑进程。
2、 在Visul C#中System.Threading 命名空间提供一些使得可以进行多线程编程的类和接口,其中线程的创建有以下三种方法:Thread、ThreadPool、Timer。下面我就它们的使用方法逐个作一简单介绍。1. Thread 这也许是最复杂的方法,但它提供了对线程的各种灵活控制。首先你必须使用它的构造函数创建一个线程实例,它的参数比较简单,只有一个ThreadStart 委托:[C#] public Thread(ThreadStart start);然后调用Start()启动它,当然你可以利用它的Priorit
3、y属性来设置或获得它的运行优先级(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(Threa
4、d1)); 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(); Con
5、sole.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 < 10000000; j++) { int a=15; a = a*a*a*a; } }以上程序运行结果为:1111111
6、11111111111111111111111111111111111211111111111111111111111111111111111111111121111111111111111111111111111111111111111112111111111111111111111111111111111111111111211111111111111111111111111111111111111111121111111111111111111111111111111111111111112 从以上结果我们可以看出,t1线程所占用CPU的时间远比t2的多,这是因为
7、t1的优先级比t2的高,若我们把t1和t2的优先级都设为Normal,那结果是如何?它们所占用的CPU时间会一样吗?是的,正如你所料,见下图: 121211221212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212
此文档下载收益归作者所有