보통의 프로젝트.cpp 파일 입니다.
여기에 뮤텍스를 이용해서 두번 실행되지 않게 처리하는 것입니다.
아래 추가된 코드를 보면 쉽게 이해될 것입니다.
뮤텍스를 중복 실행 방지용으로 많이 쓰는데 이 방법이 제일 좋습니다... 흠.. 다 아는 사실이지만 --;
이 팁은 초심자를 위해서.... 올립니다.
//---------------------------------------------------------------------------
#include "PreHeader.h"
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Main.cpp", FormMyMain);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HANDLE hMutex = NULL;
if (ParamCount() < 1) // 인자를 하나만 쓰면 ParamCount는 1이다.
{
// 뮤텍스를 이용한 중복실행 방지. : 가장확실한 방법이다. 아래 스트링에 이 프로그램의 구분명칭을 넣어주면 됩니다.
hMutex = CreateMutex(NULL, false, "TestProgram by KTS");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{ // 아래 몇줄은 이미 떠 있는 프로그램에 또 실행되었다고 통보해주는 것인데 필요없는 경우는 빼도 됩니다.
HWND hMe = FindWindow("TFormMyMain", NULL);
if (hMe)
{
// 이미 떠 있는 프로그램을 화면에 나타내게 한다.
// 만약 숨김 상태라면 나타날 것이고, 나타나 있는 상태라면 변화가 없을 것이다. 즉 프로그램이 또 실행되었다는 신호를 이미 떠 있는 프로그램에 통보해준다.
SendMessage(hMe, WM_USER + 1, 0, 0);
}
ShowMessage("이미 실행되어 있습니다. ^^; ");
return 0;
}
}
try
{
Application->Initialize();
Application->Title = "네트워크 뷰어";
Application->CreateForm(__classid(TFormMyMain), &FormMyMain);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
// 만일의 사고에 의해 핸들이 닫히지 않아도 프로세스가 종료되면 자연 뮤텍스는 풀린다.
if (hMutex)
CloseHandle(hMutex);
return 0;
}
//---------------------------------------------------------------------------
|