Mutex: Difference between revisions

Content added Content deleted
(Updated to work with Nim 1.4: replaced "TLock" with "Lock".)
(Added Delphi example)
Line 218: Line 218:
}
}
</lang>
</lang>
=={{header|Delphi}}==
{{libheader| Winapi.Windows}}
{{libheader| System.SysUtils}}
{{libheader| System.Classes}}
{{libheader| Vcl.Controls}}
{{libheader| Vcl.Forms}}
{{libheader| System.SyncObjs}}
{{libheader| Vcl.StdCtrls}}
<lang Delphi>
unit main;

interface

uses
Winapi.Windows, System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms,
System.SyncObjs, Vcl.StdCtrls;

type
TForm1 = class(TForm)
mmo1: TMemo;
btn1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
FMutex: TMutex;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
FMutex := TMutex.Create();
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FMutex.Free;
end;

// http://edgarpavao.com/2017/08/07/multithreading-e-processamento-paralelo-no-delphi-ppl/
procedure TForm1.btn1Click(Sender: TObject);
begin
//Thread 1
TThread.CreateAnonymousThread(
procedure
begin
FMutex.Acquire;
try
TThread.Sleep(5000);
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
mmo1.Lines.Add('Thread 1');
end);
finally
FMutex.Release;
end;
end).Start;

//Thread 2
TThread.CreateAnonymousThread(
procedure
begin
FMutex.Acquire;
try
TThread.Sleep(1000);
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
mmo1.Lines.Add('Thread 2');
end);
finally
FMutex.Release;
end;
end).Start;

//Thread 3
TThread.CreateAnonymousThread(
procedure
begin
FMutex.Acquire;
try
TThread.Sleep(3000);
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
mmo1.Lines.Add('Thread 3');
end);
finally
FMutex.Release;
end;
end).Start;
end;

end.</lang>
{{out}}
<pre>Thread 1
Thread 2
Thread 3</pre>


=={{header|E}}==
=={{header|E}}==