Ttimer in console application lazarus / 21-General ---------------------------------------------------------------------- simsee · 2021-03-03 15:44 Can Ttimer be used only for a GUI application or also in console applications? ---------------------------------------------------------------------- MarkMLl · 2021-03-03 16:46 Assume it can't. A more detailed answer can't be given since you've provided no info on the OS you're using or the version of Lazarus and FPC. MarkMLl ---------------------------------------------------------------------- balazsszekely · 2021-03-03 16:54 Quote from: simsee on March 03, 2021, 04:44:49 pmCan Ttimer be used only for a GUI application or also in console applications? You have several options for a console timer: 1. TTimer: Add LCL to the required packages(project inspector) 2 TFPTimer: Add fptimer to the uses, LCL is not needed 3. TThread: Measure time inside a thread, like this: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i unit uThreadTimer; {$mode objfpc}{$H+} interface uses  Classes, SysUtils, lclintf; type  TOnTimer = procedure(Sender: TObject) of object;   { TThreadTimer }   TThreadTimer = class(TThread)  private    FTime: QWORD;    FInterval: Cardinal;    FOnTimer: TOnTimer;    FEnabled: Boolean;    procedure DoOnTimer;  protected    procedure Execute; override;  public    property OnTimer: TOnTimer read FOnTimer write FOnTimer;    property Interval: Cardinal read FInterval write FInterval;    property Enabled: Boolean read FEnabled write FEnabled;    procedure StopTimer;    procedure StartTimer;    constructor Create(CreateSuspended: Boolean);    destructor Destroy; override;  end;  implementation constructor TThreadTimer.Create(CreateSuspended: Boolean);begin  inherited Create(CreateSuspended);  FInterval := 1000;  FreeOnTerminate := True;  FEnabled := False;end; destructor TThreadTimer.Destroy;begin  //  inherited Destroy;end; procedure TThreadTimer.DoOnTimer;begin  if Assigned(FOnTimer) then    FOnTimer(Self);end; procedure TThreadTimer.Execute;begin  while not Terminated do  begin    Sleep(1);    if (GetTickCount64 - FTime > FInterval) and (FEnabled) then    begin      FTime := GetTickCount64;      Synchronize(@DoOnTimer);    end;  end;end; procedure TThreadTimer.StopTimer;begin  FEnabled := False;end; procedure TThreadTimer.StartTimer;begin  FTime := GetTickCount64;  FEnabled := True;  if Self.Suspended then    Start;end;end. ---------------------------------------------------------------------- Fred vS · 2021-03-03 16:58 Quote from: simsee on March 03, 2021, 04:44:49 pmCan Ttimer be used only for a GUI application or also in console applications? Like MarkMLI explained, no (or more complicated). But you may use a TFPTimer from fptimer.pp unit: Here demo from fpc/packages/fcl-base/examples/testtimer.pp Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i {$mode objfpc}{$H+}program testtimer; uses {$ifdef unix}  cthreads,{$endif}  sysutils,classes,custapp,fptimer; Type  TTestTimerApp = Class(TCustomApplication)  Private    FTimer : TFPTimer;    FCount : Integer;    FTick : Integer;    N : TDateTime;  Public      Procedure DoRun; override;    Procedure DoTick(Sender : TObject);  end; Procedure TTestTimerApp.DoRun;  begin  FTimer:=TFPTimer.Create(Self);  FTimer.Interval:=100;  FTimer.OnTimer:=@DoTick;  FTimer.Enabled:=True;  Try    FTick:=0;    FCount:=0;    N:=Now;    While (FCount<10) do      begin      Inc(FTick);      Sleep(1);      CheckSynchronize; // Needed, because we are not running in a GUI loop.      end;  Finally    FTimer.Enabled:=False;    FreeAndNil(FTimer);  end;  Terminate;end; Procedure TTestTimerApp.DoTick(Sender : TObject); Var  D : TDateTime; begin  Inc(FCount);  D:=Now-N;  Writeln('Received timer event ',FCount,' after ',FTick,' ticks. (Elapsed time: ',FormatDateTime('ss.zzz',D),')');  FTick:=0;  N:=Now;end;         begin  With TTestTimerApp.Create(Nil) do    Try      Run    finally    Free;    end;  end.  [EDIT] Ooops, GetMem was faster.... ---------------------------------------------------------------------- simsee · 2021-03-03 17:17 My application must be cross platform.  Thanks for the replies ---------------------------------------------------------------------- Fred vS · 2021-03-03 17:23 Quote from: simsee on March 03, 2021, 06:17:33 pmMy application must be cross platform. Hello. TFPTimer is cross platform and GetMem demo too.