본문 바로가기

Programming/MFC

하나의 프로그램만 실행시키고 싶다면..

물론 FindWindow를 호출하여 할 수도 있다. 그러나 같은 이름을 가진 프로세서의 핸들을

모두 가지고 오기 때문에 실용적이지 못하다.

 

뮤텍스를 이용한 방법으로 그 대안을 찾았다.

 

뮤텍스는 스레드 동기화에서 사용하는데 이를 프로그램의 첫 시작이 되는 APP내에서 기술해 주면 간단히 해결할 수 있다.

 

// App.h

// mutex 핸들 선언

// Mutex
 HANDLE   m_hWndMutex ;

 

 

// App.cpp

// 가상 소멸자를 만들고

CDHG2000App::~CDHG2000App()
{
 CloseHandle( m_hWndMutex ) ;
}

 

// InitInstance()

// 앞 부분에 다음과 같이 선언

//==================================================================================================================
 // DHG2000이 실행중인지 찾는다.
 m_hWndMutex = NULL ;
 m_hWndMutex = ::OpenMutex( MUTEX_ALL_ACCESS, FALSE, _T("DHG2000") ) ;

 if ( m_hWndMutex == NULL )
 {
  ::CreateMutex( NULL, FALSE, _T("DHG2000") ) ;
 }
 else
 {
  AfxMessageBox( _T("Already Running DHG2000") ) ;
  return -1 ;
 }
 //==================================================================================================================

 

 

'Programming > MFC' 카테고리의 다른 글

레지스트리에 등록된 프로그램을 실행 시키기  (0) 2006.09.06
System Error Codes  (0) 2006.09.05
윈도우 클래스 이름을 얻어주는 Spy++  (0) 2006.08.31
HyperLink Static  (0) 2006.08.26
File 삭제  (0) 2006.08.22