using System; using System.Threading;namespace ManualReset { class Reset { [STAThread] static void Main() { ManualResetEvent manRE; manRE = new ManualResetEvent(true); // 赋给信号量 bool state = manRE.WaitOne(1000, true); Console.WriteLine("ManualResetEvent After first waitone " + state); manRE.Reset(); //设置ManualResetEvent状态为无信号量 state = manRE.WaitOne(5000, true); Console.WriteLine("ManualResetEvent After second waitone " + state); Console.Read(); } } } using System; using System.Threading; namespace ManualSet { class Set { [STAThread] static void Main(string[] args) { ManualResetEvent manRE; manRE = new ManualResetEvent(false); Console.WriteLine("Before waitone"); bool state = manRE.WaitOne(5000, true); Console.WriteLine("ManualResetEvent After first waitone " + state); manRE.Set(); //将其状态设为有信号量 Thread.Sleep(3000); state = manRE.WaitOne(5000, true); Console.WriteLine("ManualResetEvent After second waitone " + state); Console.Read(); } } }
据我自己理解:
WaitOne()是等待一个信号,同时阻止当前线程,当某个线程执行Set命令的时候,WaitOne接收这个信号,继续执行。
当时这个ReSet就不是很理解了,Set是“将事件状态设置为终止状态,允许一个或多个等待线程继续。 ”,而ReSet是“将事件状态设置为非终止状态,导致线程阻止。 ”
何谓“非终止状态”??“导致阻止线程”中的这个“线程”具体是那个线程?当前线程还是调用waitone的线程呢???
using System.Threading;namespace ManualReset
{ class Reset
{ [STAThread]
static void Main()
{
ManualResetEvent manRE;
manRE = new ManualResetEvent(true); // 赋给信号量
bool state = manRE.WaitOne(1000, true);
Console.WriteLine("ManualResetEvent After first waitone " + state); manRE.Reset(); //设置ManualResetEvent状态为无信号量
state = manRE.WaitOne(5000, true);
Console.WriteLine("ManualResetEvent After second waitone " + state); Console.Read();
}
}
}
using System;
using System.Threading;
namespace ManualSet
{ class Set
{ [STAThread]
static void Main(string[] args)
{
ManualResetEvent manRE;
manRE = new ManualResetEvent(false);
Console.WriteLine("Before waitone");
bool state = manRE.WaitOne(5000, true);
Console.WriteLine("ManualResetEvent After first waitone " + state); manRE.Set(); //将其状态设为有信号量
Thread.Sleep(3000);
state = manRE.WaitOne(5000, true);
Console.WriteLine("ManualResetEvent After second waitone " + state);
Console.Read();
}
}
}