C#中的多线程编程.doc

C#中的多线程编程.doc

ID:61462194

大小:37.00 KB

页数:9页

时间:2021-02-02

C#中的多线程编程.doc_第1页
C#中的多线程编程.doc_第2页
C#中的多线程编程.doc_第3页
C#中的多线程编程.doc_第4页
C#中的多线程编程.doc_第5页
资源描述:

《C#中的多线程编程.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、C#中的多线程编程C#是.Net平台的通用开发工具,它能够建造所有的.Net应用。在.Net中所有线程都运行在应用程序域(AppDomain)中,这也许让你想到Win32进程,实际上它们还是有很大的不同。应用程序域提供了一种安全而通用的处理单元,公共语言运行库可使用它来隔离应用程序。注意在.Net中应用程序的隔离是应用程序域而不是进程,在单个进程中可以存在几个应用程序域,而且线程可以跨越应用程序域的范围,某个线程中的方法可以调用另一个线程的方法,这样的话就不会造成进程间调用或进程间切换等方面的额

2、外开销。可以说应用程序域是物理进程(也即win32中的Process)内的逻辑进程。     在Visul C#中System.Threading 命名空间提供一些使得可以进行多线程编程的类和接口,其中线程的创建有以下三种方法:Thread、ThreadPool、Timer。下面我就它们的使用方法逐个作一简单介绍。1. Thread       这也许是最复杂的方法,但它提供了对线程的各种灵活控制。首先你必须使用它的构造函数创建一个线程实例,它的参数比较简单,只有一个ThreadStart 委托

3、:[C#]                   public Thread(ThreadStart start);然后调用Start()启动它,当然你可以利用它的Priority属性来设置或获得它的运行优先级(enum ThreadPriority:  Normal、 Lowest、 Highest、 BelowNormal、 AboveNormal)。见下例:它首先生成了两个线程实例t1和t2,然后分别设置它们的优先级,接着启动两线程(两线程基本一样,只不过它们输出不一样,t1为“1”,t2为

4、“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 

5、= 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 = 

6、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;   }  }以上程序运行结果为:       从以上结果我们可以看出,t1线程所占用CPU的时间远比t2的多,这是因为t1

7、的优先级比t2的高,若我们把t1和t2的优先级都设为Normal,那结果是如何?它们所占用的CPU时间会一样吗?是的,正如你所料,见下图: 2121212          从上例我们可看出,它的构造类似于win32的工作线程,但更加简单,只需把线程要调用的函数作为委托,然后把委托作为参数构造线程实例即可。当调用Start()启动后,便会调用相应的函数,从那函数第一行开始执行。 接下来我们结合线程的ThreadState属性来了解线程的控制。ThreadState是一个枚举类型,它反映的是线程所

8、处的状态。当一个Thread实例刚创建时,它的ThreadState是Unstarted;当此线程被调用Start()启动之后,它的ThreadState是 Running;  在此线程启动之后,如果想让它暂停(阻塞),可以调用Thread.Sleep() 方法,它有两个重载方法(Sleep(int )、Sleep(Timespan )),只不过是表示时间量的格式不同而已,当在某线程内调用此函数时,它表示此线程将阻塞一段时间(时间是由传递给 Sleep 的毫秒数或Timespan决定的,但若参数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。