ManualResetEvent
线程是程序中的控制流程的封装。你可能已经习惯于写单线程程序,也就是,程序在它们的代码中一次只在一条路中执行。如果你多弄几个线程的话,代码运行可能 会更加“同步”。
在一个有着多线程的典型进程中,零个或更多线程在同时运行。但是,在有着N个CPU的机器上,一个线程只能在给定的时间上在一个CPU上 运行,因为每个线程都是一个代码段,每个CPU一次只能运行一段代码。而看起来像是N个同时完成是线程间共享CPU时间片的效果。
这个例子里,我们将创建 另一个线程,我们将用两个线程演示多线程的工作方式,最后,我们实现两个线程(主线程与新线程)同步,在新线程工作前必须等待消息。建立线程前我们必须引 入System.Threading命名空间。然后我需要知道的是,线程得为控制流程建立一个起点。起点是一个函数,可以使一个相同的调用或其它。
这里你可以看到在同一个类中定义的起点函数。
class ThreadClass { public static ManualResetEvent mre = new ManualResetEvent(false); public static void trmain() { Thread tr = Thread.CurrentThread; Console.WriteLine("thread: waiting for an event"); mre.WaitOne(); Console.WriteLine("thread: got an event"); for (int x = 0; x < 10; x++) { Thread.Sleep(1000); Console.WriteLine(tr.Name + ": " + x); } } static void Main(string[] args) { Thread thrd1 = new Thread(new ThreadStart(trmain)); thrd1.Name = "thread1"; thrd1.Start(); for (int x = 0; x < 10; x++) { Thread.Sleep(900); Console.WriteLine("Main:" + x); if (5 == x) mre.Set(); } while (thrd1.IsAlive) { Thread.Sleep(1000); Console.WriteLine("Main: waiting for thread to stop"); } } }
当初始化为true时,为终止状态
static
ManualResetEvent _mre =
new
ManualResetEvent(
true
);
当初始化为false时,为非终止状态
static
ManualResetEvent _mre =
new
ManualResetEvent(
false
);
终止状态时WaitOne()允许线程访问下边的语句
非终止状态时WaitOne()阻塞线程,不允许线程访问下边的语句
把非终止状态改为终止状态用Set()方法
把终止状态改为非终止状态用Reset()方法