C# 线程(Threading)编程 实例

来源:互联网 发布:淘宝详情页尺寸大小 编辑:程序博客网 时间:2024/05/04 01:48
手头一个项目中,使用到多线程例, 分配任务, 处理任务,显示任务状态,等.

下面的代码就是一个样例. 供大家参考.

  1. /* By shelly<mrshelly at hotmail.com> */
  2. using System;
  3. using System.Threading;
  4. using System.Collections;
  5. namespace shareThread{
  6.     class MyThread{
  7.         static Queue q1=new Queue();
  8.         static int b=0;
  9.         int thState = 3;
  10.         public void getTask(){
  11.             while((this.thState & 1) == 1){
  12.                 lock(this){
  13.                     ++b;
  14.                     q1.Enqueue(b);
  15.                     System.Console.WriteLine("getTask:{0}--------------",b);
  16.                 }
  17.                 Thread.Sleep(200);
  18.             }
  19.         }
  20.         public void doTask(){
  21.             int curB = 0;
  22.             while((this.thState & 2) == 2){
  23.                 if(q1.Count >0){
  24.                     lock(this) curB = (int)q1.Dequeue();
  25.                     System.Console.WriteLine("doTask:{0}---{1}-----------",curB,q1.Count);
  26.                 }
  27.                 if(q1.Count >5){
  28.                     Thread.Sleep(100);
  29.                 }else{
  30.                     Thread.Sleep(5000);
  31.                 }
  32.             }
  33.         }
  34.         public void showQueue(){
  35.             while(true){
  36.                 System.Console.Write(" {0} -->", q1.Count);
  37.                 Thread.Sleep(1000);
  38.             }
  39.         }
  40.         public void setState(int s){
  41.             lock(this){
  42.                 thState = s;
  43.             }
  44.         }
  45.     }
  46.     class ClassMain{
  47.         [STAThread]
  48.         static void Main(string[] args){
  49.             MyThread myc;
  50.             Thread thDoTask1, thDoTask2, thDoTask3, thGetTask, thShowTask;
  51.             myc=new MyThread();
  52.             thDoTask1 = new Thread(new ThreadStart(myc.doTask));
  53.             thDoTask1.Start();
  54.             thDoTask2 = new Thread(new ThreadStart(myc.doTask));
  55.             thDoTask2.Start();
  56.             thDoTask3 = new Thread(new ThreadStart(myc.doTask));
  57.             thDoTask3.Start();
  58.             thGetTask = new Thread(new ThreadStart(myc.getTask));
  59.             thGetTask.Start();
  60.             thShowTask = new Thread(new ThreadStart(myc.showQueue));
  61.             thShowTask.Start();
  62.             Thread.Sleep(20000);//主线程睡眠
  63.             myc.setState(0);
  64.             System.Console.Read();//等待完成,dos窗口不会马上关闭了.
  65.         }
  66.     }
  67. }