我在多線程的情況下,我有一個函數,我想一次只從一個線程運行。但是,我不想以傳統的方式序列化函數,而是想讓所有嘗試進入函數的線程在第一個線程運行時立即返回。我不希望第二個線程等待第一個線程。互斥鎖和線程問題
這裏是我的代碼:
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,我建議你爲此詢問一個單獨的問題。 –