您的位置:首页 >> 编程开发 >> .NET >> C# >> 正文
C# RSS
 

VisualC#中的多线程编程

http://www.rdxx.com 02年08月30日 11:26 互联网 我要投稿

关键词: 多线程 , C# , 编程 , 线程

C#是.Net平台的通用开发工具,它能够建造所有的.Net应用。在.Net中所有线程都运行在应用程序域(AppDomain)中,这也许让你想到Win32进程,实际上它们还是有很大的不同。应用程序域提供了一种安全而通用的处理单元,公共语言运行库可使用它来隔离应用程序。注意在.Net中应用程序的隔离是应用程序域而不是进程,在单个进程中可以存在几个应用程序域,而且线程可以跨越应用程序域的范围,某个线程中的方法可以调用另一个线程的方法,这样的话就不会造成进程间调用或进程间切换等方面的额外开销。可以说应用程序域是物理进程(也即win32中的Process)内的逻辑进程。
     在Visul C#中System.Threading 命名空间提供一些使得可以进行多线程编程的类和接口,其中线程的创建有以下三种方法:Thread、ThreadPool、Timer。下面我就它们的使用方法逐个作一简单介绍。
1. Thread
       这也许是最复杂的方法,但它提供了对线程的各种灵活控制。首先你必须使用它的构造函数创建一个线程实例,它的参数比较简单,只有一个ThreadStart 委托:
[C#]
                   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 < 10000000; j++)
   {   
    int a=15;
    a = a*a*a*a;
   }
  }
以上程序运行结果为:

11111111111111111111111111111111111111111121111111111111111111111111111111111111111112

11111111111111111111111111111111111111111121111111111111111111111111111111111111111112

11111111111111111111111111111111111111111121111111111111111111111111111111111111111112
 
      从以上结果我们可以看出,t1线程所占用CPU的时间远比t2的多,这是因为t1的优先级比t2的高,若我们把t1和t2的优先级都设为Normal,那结果是如何?它们所占用的CPU时间会一样吗?是的,正如你所料,见下图:

共5页  1 2 3 4 5


 
 
标签: 多线程 , C# , 编程 , 线程 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站