Monitor 사용법
C#클래스에 Monitor라는 클래스가 존재한다.
Lock기능을 하는 클래스라고 저는 이해하고 있지만 짧은 소견으로 말하는거니 궁금하신분들은 아래링크를 참조;;
http://msdn.microsoft.com/ko-kr/library/hf5de04k(v=vs.95).aspx
http://msdn.microsoft.com/ko-kr/library/system.threading.monitor.aspx
사용법은 비교적 간단하다.
Enter 집어넣는다. Exit꺼낸다.
Wait로 묶어 놓는다. Pulse로 풀어준다.
저는 이런식으로 이해하고 있지만 좀더 명쾌하지 못한점은 아직 공부가 부족하니 조언부탁드립니다.
차후 더 공부하게 되면 업데이트 시키겠습니다.(게으르지만;)
매우 간단한 코드를 만들어 보았다;;
생성하자 마자 Thread를 생성하여 Thread안에서 다시 Timer Thread를 만들어서 5초뒤에 Pulse를 호출하여
Wait상태를 풀어주는 코드이다.
public MonitorTestClass()
{
ThreadPool.QueueUserWorkItem(MessageClick);
}
public void MessageClick(object obj)
{
lock (this)
{
ThreadPool.QueueUserWorkItem(MonitorLockClear);
Monitor.Wait(this);
MessageBox.Show("Message Aleart");
}
}
void MonitorLockClear(object obj)
{
int count = 0;
while (true)
{
Thread.Sleep(1000);
if (count == 5)
{
count = 0;
lock (this)
{
Monitor.Pulse(this);
}
}
count++;
}
}
주로 Monitor는 Msdn 샘플 코드에서도 Queue를 들고 있을정도로 Queue 관리에서 많이 사용하는 것 같다.
저도 Queue에서 사용하려고 Lock함수를 찾아보던 중에 찾게됐으니;;
무작정 Queue를 쓰면 메모리가 너무 많이 올라가서 컴퓨터가 멈춰버리는 현상이 발생해서
큐에 집어넣는 부분을 Wait걸어줄 필요성을 느껴서 찾게 되었다.
차후에 공부를 더한후에 업데이트 시키겠습니다.
'Programming Lv1 > C#' 카테고리의 다른 글
OpenFileDialog 파일 선택창 (0) | 2013.04.10 |
---|---|
C# partial class (0) | 2013.01.30 |
c# enum 사용하기 (0) | 2013.01.30 |
C# 2차원 배열선언 (0) | 2011.07.21 |
C#에서 컨트롤 이동시 스크롤 위치계산하여 상위부터 표시 (0) | 2011.07.21 |