프로젝트 부분에 코딩되어있는 내용입니다.
=====================================================================
var
Mutex : THANDLE;
mutexname : String;
begin
try
mutexname := Application.ExeName;
mutex := openMutex (0,false , PChar(mutexname));
if (mutex = 0) then
begin
Mutex := CreateMutex(NIL,true , PChar(mutexname));
end
else
begin
Application.MessageBox('이미 프로그램이 실행중입니다. ' , '경고', MB_OK+MB_ICONWARNING);
Exit;
end;
FrmLogo := TFrmLogo.Create(Application);
try
FrmLogo.Show;
FrmLogo.Update;
Application.Initialize;
Application.Title := 'app';
Application.CreateForm(TFrmMainMenu, FrmMainMenu);
:
:
Application.CreateForm(TFormMSG, FormMSG);
FrmLogo.Hide;
finally
FrmLogo.Free;
end;
Application.Run;
except
Application.MessageBox('Mutex 를 열수 없습니다.' , '경고', MB_OK+MB_ICONWARNING);
end;
ReleaseMutex(mutex);
end.
===================================================================
이런식으로 mutex를 사용하는데 간혹 'mutex를 열수없습니다.'라는
에러가 발생합니다. 계속 잘 사용중인 프로그램에서도 한번 발생하여
그 담부터 계속 mutex를 열수없다는 메시지가 발생하더군요.
(한번 발생하면 컴퓨터를 리붓해도 소용없음.)
결국 이전에 백업해둔 프로그램으로 돌리는데 이건 또 됩니다.
같은 프로그램인데 말이죠....-_-;;;
혹시 제가 mutex를 잘못사용한걸까요?
아니면 mutex를 제대로 클리어 못한걸까요?
프로제트 파일을 아래와 같이....
program Project1;
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};
var
Mutex : THandle;
{$R *.res}
begin
Mutex := CreateMutex(nil, True, 'noDuplicate');
if (Mutex <> 0 ) and (GetLastError = 0) then begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
if Mutex <> 0 then
CloseHandle(Mutex);
end;
end.