[tips]: 多线程 ManualResetEvent
2009-05-21 14:23 敏捷的水 阅读(515) 评论(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
版权:本文版权归作者所有,转载需经作者同意。