2011-04-24 7 views
2

한 번에 둘 이상의 프로세스를 실행할 수없는 여러 응용 프로그램이 있습니다. 예를 들어 Window Media Player 인스턴스 두 개를 실행할 수 없습니다. exe를 여러 번 클릭하더라도 다른 프로세스는 이 아니며이 시작됩니다! 한 번에 최대 하나의 프로세스가 실행되도록 보장

나는 다음과 같은 상황에서이 작업을 수행하는 방법을 궁금 해서요 : 응용 프로그램이 C++로 개발

  • 합니다. 응용 프로그램은 GUI 기반 응용 프로그램 일 필요는 없습니다. 응용 프로그램이 .NET 기술을 사용하여 개발 된 경우
  • 다시 말하지만 응용 프로그램은 GUI 기반 응용 프로그램 일 필요는 없습니다.

나는 이것에 대해 전혀 몰라서 질문을 적절하게 제기하는 방법조차 모릅니다. 내가 무엇이든 (어떤 종류의 내용이라도) 빠뜨렸다면, 설명을 요구하거나 대답에 (가능한 경우) 가정하십시오.

+4

http://stackoverflow.com/search?q=single+instance+application을 검색하십시오. 이것은 일반적인 질문입니다. –

답변

3

일반적으로 응용 프로그램은 시작할 때 고유 한 리소스를 확보해야합니다. 실패하면 종료해야합니다. 고유 리소스의 특성은 환경에 따라 다릅니다. 예를 들어, 특정 TCP 포트에서 수신 대기하거나 파일 또는 공유 메모리 세그먼트를 잠글 수 있습니다. 물론 프로그램은 리소스가 종료 될 때 리소스를 해제하는 데주의해야합니다.

3

그들은 모두 같은 속임수에 의존합니다. 잘 알려진 명명 된 개체 (일반적으로 Mutex)를 만들고 잠급니다. 모든 인스턴스는 시작 중에이 오브젝트를 작성하고 잠그려고 시도합니다. 이미 존재하고 잠글 수 없으면 다른 인스턴스가 이미 실행 중이므로 종료합니다.

0
private static Mutex m_Mutex; 
m_Mutex = new Mutex(true, "myApp"); 

     if (m_Mutex.WaitOne(0, false)) 
      Application.Run(new MainForm()); 
+0

이 작업은 스레드뿐만 아니라 프로세스에서도 작동합니까? – Jay

관련 문제