我在Button2Click上面创建了一个互斥量,然后在Button1Click来判断Button2Click是否正在运行。我先单击了Button2Click,后单击Button1Click,提示Button2Click一直在运行,这是为什么呢?
代码如下:procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'Run1') <> 0 then
begin
ShowMessage('对不起,Button2在运行');
Exit;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i,sum:integer;
begin
sum:=1;
for i:=0 to 1000 do
begin
sum:=sum+i;
label1.Caption :=inttostr(sum);
Application.ProcessMessages;
end;
ReleaseMutex(mutexhal);
exit;
end;麻烦高手解决一下
var
i,sum:integer;
begin
mutexhal := CreateMutex(nil, TRUE, 'Run1');
sum:=1;
for i:=0 to 1000 do
begin
sum:=sum+i;
label1.Caption :=inttostr(sum);
Application.ProcessMessages;
end;
ReleaseMutex(mutexhal);
exit;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateMutex(nil, True, 'Run1');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowMessage('对不起,Button2在运行');
Exit;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hMutex: THandle;
begin
hMutex := CreateMutex(nil, True, 'Run1');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowMessage('对不起,Button2在运行');
Exit;
end
else
begin
if hMutex <> 0 then
begin
ReleaseMutex(hMutex);
end;
end;
end;
//先定义了一个全局句柄mutexhal
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'Run1') <> 0 then
begin
ShowMessage('对不起,Button2在运行');
Exit;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i,sum:integer;
begin
mutexhal := CreateMutex(nil, TRUE, 'Run1');
sum:=1;
for i:=0 to 1000 do
begin
sum:=sum+i;
label1.Caption :=inttostr(sum);
Application.ProcessMessages;
end;
ReleaseMutex(mutexhal);
exit;
end;
var
i,sum:integer;
begin
sum:=1;
mutexhal := CreateMutex(nil, TRUE, 'Run1');
for i:=0 to 1000 do
begin
sum:=sum+i;
label1.Caption :=inttostr(sum);
Application.ProcessMessages;
sleep(1);
end;
ReleaseMutex(mutexhal);
CloseHandle(mutexhal);
exit;
end;procedure TForm1.Button1Click(Sender: TObject);
var
hpa,hc:HWND;
begin
if OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'Run1') <> 0 then //
begin
ShowMessage('对不起,些程序已运行');
end;
//hpa:=Findwindow(nil,Pchar('form2'));
//hc:=FindWindowEx(hpa,0,nil,Pchar('button1'));
//SendMessage(hpa,WM_COMMAND,BN_CLICKED,hc);
//label1.Caption :='??????? !!!!';
end;当Button2Click还没有运行结束的时候,我单击Button1Click提示是正确的,提示“对不起,些程序已运行”,当Button2Click运行结束了,单击Button1Click还提示“对不起,些程序已运行”
var
local_mutexhal: THandle;
begin
local_mutexhal := OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'Run1');
if local_mutexhal<> 0 then //
begin
CloseHandle(local_mutexhal);
ShowMessage('对不起,此程序已运行'+IntToStr(GetLastError));
end;
end;
非常感谢unsigned,调试成功谢谢!!!