【发布时间】:2011-09-15 11:21:10
【问题描述】:
我处于多线程情况,我有一个函数,我想一次只从一个线程运行。但是,不是以传统方式序列化函数,我希望在第一个线程运行它时尝试进入函数的任何线程立即返回。我不希望第二个线程等待第一个线程。
这是我的代码:
function InitMutex(const Name:String; var Handle: THandle):Boolean;
begin
Handle := CreateMutexA(NIL, True, PAnsiChar(Name));
Result := not (GetLastError = ERROR_ALREADY_EXISTS);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
mHandle: THandle;
begin
if not InitMutex(BalloonTipMutex, mHandle) then Exit;
MessageBox(0, 'Executing Code....', '', 0);
ReleaseMutex(mHandle);
CloseHandle(mHandle);
end;
这只是一个有同样问题的例子,因为我无法用线程做一个测试样本。
问题是:我第一次单击button1,出现消息框,而消息框仍然显示(假设该功能仍在运行)我再次按下button1,没有任何显示(这是应该发生的)但是当我关闭消息框并再次按下按钮时,它什么也不显示。 (该函数应该再次运行,因为它没有运行:S)
【问题讨论】:
标签: multithreading delphi mutex