[fpc-pascal] Use sleep in thread

fredvs fiens at hotmail.com
Wed Feb 25 21:17:46 CET 2015


Hello.

You may use RTLEvents to pause a thread. =>

Program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes;

Type

  { THelloThread }

  THelloThread = class(TThread)
    fSleepTime,fThreadNum:integer;
    fEvent:PRTLEvent;
    procedure Execute; override;
    constructor Create(sleepTime,threadNum:integer);
    destructor Destroy; override;
  end;

var

  ThreadArray:array[1..10] of THelloThread;

{ THelloThread }

procedure THelloThread.Execute;
begin
  while true do
  begin
    writeln('Thread ',fThreadNum,' sleeping for ',fsleepTime,' ms');
    RTLeventWaitFor(fEvent,fSleepTime);
    if Terminated then break;
    //don't forget to reset,
    RTLeventResetEvent(fEvent);
    writeln('Hello From Thread ',fThreadNum);
  end;
  writeln('Bye from ',fThreadNum);
end;

constructor THelloThread.Create(sleepTime,threadNum: integer);
begin
  inherited Create(true);
  FreeOnTerminate := true;
  fEvent := RTLEventCreate;
  fSleepTime := sleepTime;
  fThreadNum := threadNum;
  Start;
end;

destructor THelloThread.Destroy;
begin
  RTLeventdestroy(fEvent);
  inherited Destroy;
end;

procedure CreateThreads;
var
  l:integer;
begin
  for l := low(ThreadArray) to high(ThreadArray) do
    ThreadArray[l] := THelloThread.Create(l*1000,l);
end;

procedure StopThreads;
var
  l:integer;
begin
  for l := low(ThreadArray) to high(ThreadArray) do
  begin
    ThreadArray[l].Terminate;
    RTLeventSetEvent(ThreadArray[l].fEvent); //wake event up for early
terminattion
    ThreadArray[l].WaitFor;
  end;
end;

begin
  CreateThreads;
  writeln('Press Any Key To Stop.');
  readln;
  StopThreads;
  writeln('All threads stopped');
  readln;
end.



-----
Many thanks ;-)
--
View this message in context: http://free-pascal-general.1045716.n5.nabble.com/Use-sleep-in-thread-tp5721119p5721129.html
Sent from the Free Pascal - General mailing list archive at Nabble.com.



More information about the fpc-pascal mailing list