mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 23:48:15 +02:00
79 lines
1.2 KiB
ObjectPascal
79 lines
1.2 KiB
ObjectPascal
{%skiptarget=$nothread }
|
|
{ Source provided for Free Pascal Bug Report 3695 }
|
|
{ Submitted by "Pedro Lopez-Cabanillas" on 2005-02-25 }
|
|
{ e-mail: plcl@telefonica.net }
|
|
program testsync;
|
|
|
|
{$ifdef FPC}
|
|
{$mode delphi}
|
|
{$endif}
|
|
|
|
uses
|
|
{$ifdef unix}
|
|
cthreads,
|
|
{$endif unix}
|
|
Classes, SysUtils
|
|
;
|
|
|
|
type
|
|
Tester = class
|
|
private
|
|
counter: Integer;
|
|
public
|
|
procedure count;
|
|
procedure run;
|
|
end;
|
|
|
|
MyThread = class(TThread)
|
|
private
|
|
worker: Tester;
|
|
public
|
|
constructor Create(w: Tester);
|
|
procedure Execute; override;
|
|
end;
|
|
|
|
constructor MyThread.Create(w: Tester);
|
|
begin
|
|
worker:= w;
|
|
inherited Create(false);
|
|
end;
|
|
|
|
procedure MyThread.Execute;
|
|
begin
|
|
WriteLn('Starting MyThread.Execute');
|
|
repeat
|
|
Synchronize(worker.count);
|
|
until Terminated;
|
|
WriteLn('Ending MyThread.Execute');
|
|
end;
|
|
|
|
procedure Tester.count;
|
|
begin
|
|
Inc(counter);
|
|
WriteLn(counter);
|
|
end;
|
|
|
|
procedure Tester.run;
|
|
var
|
|
thread: MyThread;
|
|
begin
|
|
thread := MyThread.Create(Self);
|
|
While counter < 10 do
|
|
begin
|
|
Sleep(100);
|
|
CheckSynchronize;
|
|
//WriteLn('Loop forever inside Tester.run when compiled by FPC 1.9.8');
|
|
end;
|
|
thread.Terminate;
|
|
CheckSynchronize;
|
|
thread.waitfor;
|
|
end;
|
|
|
|
var
|
|
t: Tester;
|
|
begin
|
|
t:=Tester.Create;
|
|
t.run;
|
|
t.free;
|
|
end.
|