unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages,
System.SysUtils, System.Variants, System.Classes, System.SyncObjs,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls;
type
TForm1 =
class( TForm )
Button1: TButton;
Button2: TButton;
procedure Button1_Click( Sender: TObject );
procedure Button2_Click( Sender: TObject );
private
FMutex: TMutex;
public
procedure AfterConstruction;
override;
procedure BeforeDestruction;
override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
Mutex_Name =
{$IFDEF GLOBAL}'
global\'+
{$ENDIF}'
MyMutex';
procedure TForm1.AfterConstruction;
begin
inherited;
FMutex := TMutex.Create(
nil, false, Mutex_Name );
end;
procedure TForm1.BeforeDestruction;
begin
FMutex.Free;
inherited;
end;
procedure TForm1.Button1_Click( Sender: TObject );
begin
if FMutex.WaitFor( 0 ) = TWaitResult.wrSignaled
then
begin
// We have the mutex
Button1.Enabled := false;
Button2.Enabled := True;
end;
end;
procedure TForm1.Button2_Click( Sender: TObject );
begin
// We have the mutex, so we release it
FMutex.Release;
Button1.Enabled := True;
Button2.Enabled := false;
end;
end.