[tips]: 多线程 ManualResetEvent
2009-05-21 14:23 敏捷的水 阅读(522) 评论(0) 收藏 举报WaitHandle用于实现对共享资源的独占访问,AutoResetEvent和ManualResetEvent都继承自它。 WaitHandle.WaitOne方法将阻塞当前线程,直到WaitHandle收到信号。但有时候,我们需要非阻塞的方式测试WaitHandle 状态。
public virtual bool WaitOne(int millisecondsTimeout)
可以指定等待的时间间隔。如果当前实例收到信号,则为true;否则为false。特别地,如果 millisecondsTimeout为零,则该方法不会进入阻塞状态。该方法会测试等待句柄的状态并立即返回。
ManualResetEvent mre=new ManualResetEvent(false) //默认无信号
mre.set()可以让当前实例获得信号
现在我们先让程序每个10秒输出Hello world,可以这么写:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Threading;
   6:  
    7: namespace MultiThread
   8: {
    9: public class Program
  10:     {
    11: static ManualResetEvent mre = new ManualResetEvent(false);
12: static void Main()
  13:         {
    14: Thread t = new Thread(new ThreadStart(Hello));
  15:             t.Start();
    16: while (true)
  17:             {
    18: char a = Console.ReadKey().KeyChar;
19: if (a.ToString().ToUpper() == "X")
  20:                 {
      21:                     mre.Set();
      22:                     t.Abort();
      23:                     t.Join();
    24: Console.WriteLine(t.Name + " stopped");
25: break;
  26:                 }
      27:             }
      28:         }
      29:  
    30: static void Hello()
  31:         {
    32: while (true)
  33:             {
    34: if (mre.WaitOne(1 * 1000)) break;
35: Console.WriteLine("Hello");
  36:             }
      37:         }
      38:     }
      39: }
      40:  
  扫码关注公众号,了解更多管理,见识,育儿等内容
作者: 王德水
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。
                
            
        
浙公网安备 33010602011771号