블로그 이미지
평강왕자

카테고리

분류 전체보기 (35)
Programming Lv1 (32)
Programming LV2 (0)
취미 (3)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

Monitor 사용법

Programming Lv1/C# / 2013. 6. 14. 14:33

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
Posted by 평강왕자
, |

최근에 달린 댓글

글 보관함