728x90
주요 인터페이스 개념
생상자에 true/false 값으로 Set/Reset 여부를 지정할 수 있음
Set : 차단기를 올린다. 차가 지나 갈수 있음. (스레드 진행)
WaitOne : 차단기가 열리기까지 기다린다. 열려 있으면 차가 지나가고 아니라면 기다린다.
Reset : 차단기를 내린다. 이후 차는 다시 차단기가 올라가기(Set)까지 지나 갈 수 없다.
ManualResetEvent Vs AutoResetEvent
AutoResetEvent는 WaitOne 호출되고 바로 Reset 호출된다
반면, ManulResetEvent는 WaitOne 이후에 명시적으로 Reset을 호출해야 한다.
테스트 코드
class Program
{
static ManualResetEvent event1 = new ManualResetEvent(true);
static void Main(string[] args)
{
Timer timer = new Timer();
timer.Interval = 1000;
timer.Elapsed += Timer_Elapsed;
timer.Start();
while(true)
{
}
}
private static void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
event1.WaitOne();
event1.Reset();
//Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
DateTime now = DateTime.Now;
Random ran = new Random();
Thread.Sleep(ran.Next(0, 10000));
Console.WriteLine(now);
event1.Set();
}
}
728x90