AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTimer zu schnell?

Ein Thema von TurboMagic · begonnen am 14. Jul 2024 · letzter Beitrag vom 16. Jul 2024
Antwort Antwort
Seite 2 von 2     12   
Kas Ob.

Registriert seit: 3. Sep 2023
353 Beiträge
 
#11

AW: TTimer zu schnell?

  Alt 16. Jul 2024, 11:42
Keep it simple and readable like this
Code:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  FAppStartTick := GetTickCount;    // or even better GetTickCount64
  FAppStartTime := Now;
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
const
  ALLOWED_DATETIME_DEVIATION_SEC = 60;
var
  LDeltaTicks: Cardinal;                    // in case GettickCount instead of GetTickCount64
  LDeltaSeconds: Integer;
  LExpectedTime: TDateTime;
begin
  LDeltaTicks := GetTickCount - FAppStartTick;
  LExpectedTime := IncMilliSecond(FAppStartTime, LDeltaTicks);
  LDeltaSeconds := SecondsBetween(LExpectedTime, Now);

  if LDeltaSeconds > ALLOWED_DATETIME_DEVIATION_SEC then
  begin
    raise Exception.Create('System Time has been changed form the expected time by '+IntToStr(LDeltaSeconds)+' seconds');
  end;
end;
This has nothing to do with timer interval nor will depend on any OS specific timing functionality that might comes slow or fast (like timers messages or Sleep in Background Thread...)
It will work as intended always.
Kas
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#12

AW: TTimer zu schnell?

  Alt 16. Jul 2024, 13:01
Hallo,

danke für diesen Codevorschlag. Werde diesen sobald wie möglich mal
umsetzen und den Anwender testen lassen.
Grüße
TurboMagic
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
353 Beiträge
 
#13

AW: TTimer zu schnell?

  Alt 16. Jul 2024, 13:57
Hallo,

danke für diesen Codevorschlag. Werde diesen sobald wie möglich mal
umsetzen und den Anwender testen lassen.
In that case then this version is better refactored and more useful
Code:
type
  TForm11 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FAppStartTick: Cardinal;   // or even better GetTickCount64
    FAppStartTime: TDateTime;
    function TimeChangeCheck(Silent: Boolean = False): Boolean;
    procedure TimeChangeReset;
  public
    { Public declarations }
  end;

var
  Form11: TForm11;

implementation

uses
  System.DateUtils;

{$R *.dfm}

procedure TForm11.FormCreate(Sender: TObject);
begin
  TimeChangeReset;
end;

procedure TForm11.Timer1Timer(Sender: TObject);
begin
  TimeChangeCheck;
end;

function TForm11.TimeChangeCheck(Silent: Boolean = False): Boolean;
const
  ALLOWED_DATETIME_DEVIATION_SEC = 2;
var
  LDeltaTicks: Cardinal;                   // in case GettickCount instead of GetTickCount64
  LDeltaSeconds: Integer;
  LExpectedTime: TDateTime;
begin
  LDeltaTicks := GetTickCount - FAppStartTick;
  LExpectedTime := IncMilliSecond(FAppStartTime, LDeltaTicks);
  LDeltaSeconds := SecondsBetween(LExpectedTime, Now);
  Result := LDeltaSeconds > ALLOWED_DATETIME_DEVIATION_SEC;
  if Result and not Silent then
    raise Exception.Create('System Time has been changed form the expected time by ' + IntToStr(LDeltaSeconds) + ' seconds');
end;

procedure TForm11.TimeChangeReset;
begin
  FAppStartTick := GetTickCount;   // or even better GetTickCount64
  FAppStartTime := Now;
end;
Kas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz