我在多线程的情况下,我有一个函数,我想一次只从一个线程运行。但是,我不想以传统的方式序列化函数,而是想让所有尝试进入函数的线程在第一个线程运行时立即返回。我不希望第二个线程等待第一个线程。互斥锁和线程问题
这里是我的代码:
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时出现messagebox,而messagebox仍然显示(假设函数仍在运行)我再次按下button1,没有任何显示(这是应该发生的)但是当我关闭消息框并再次按下按钮时,它什么也不显示。 (所谓的功能,因为它没有运行再次运行:S)
谢谢,那完全没有工作:D,那么你认为我应该在这种情况下使用什么? – killercode
互斥量对此非常重量级。很难相信这是最好的解决方案。 –
@Killercode,我建议你为此询问一个单独的问题。 –