예전에 findwindow 를 통해서 특정 프로그램이 실행하지는 여부를 판별하는 법에 대하여
정리 했었습니다.

findwindow 사용법(VB , C++)


이것을 응용하여 중복실행을 방지하는 부분도 코딩을 하곤 했었는데
더 괜찮은 방법이 있으서 정리합니다.

바로 Mutex(뮤텍스) 입니다.

Mutex는 커널 오브젝트로 프로세스 핸들을 가집니다. (HANDLE)
주로 CriticalSection(크리티컬섹션)과 Semaphore(세마포어), 그리고 이벤트기법 과 함께
쓰레드등의 동기화 기법중 하나로 사용합니다.

뮤텍스는 이름을 가질수가 있는데 그로인하여서
  • 프로세스간에도 사용 가능합니다.
  • 크리티컬 섹션보다 우월합니다. -> 대신 그만큼 속도는 느림니다.--; (커널 오브젝트이기 때문에)
뮤텍스는 두 쓰레드가 동시에 소유할 수 없고 한 처음엔 signaled 이다가 쓰레드가 가지면
Non-signaled(비신호) 상태가 됩니다.

더깊은 얘기는 인터넷을 검색해보시기 바랍니다.
이글을 Mutex에 대한 설명보다는 Mutex를 이용하여 중복실행을 방지하는 법을 소개하겠습니다.

일단 함수 몇개를 소개하겠습니다.

뮤텍스 생성 합니다.



사용예



정리하고 나니깐 너무 간단하네요..ㅡㅡ;

findwindow() 등을 통한 방법과 비교해서 장점이라면
윈도우 클래스나 캡션은 중복 가능성이 많지만 뮤텍스는 이름을 복잡하게 주면 중복을 피할 수 있습니다.

마지막으로 뮤텍스 이름은 대소문자를 구분합니다.
대충 여러분이 만드시는 소스에서 어느부분에 어떻게 쓰실건가는 여러분이 알아서 쓰실거라 생각됩니다.
Posted by 빨강토끼
,