Thema: Timer Reset ?

Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Timer Reset ?

  Alt 24. Feb 2017, 07:35
Ja genau, TTimer in VCL. Das ist ganz merkwürdig. Hab ich so auch noch nie erlebt. Zur Reproduktion des Fehlers habe ich ein ganz einfaches Testprogramm gebastelt:
Delphi-Quellcode:
unit Unit5;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    FCounter: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FCounter:= 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Inc(FCounter);
  Timer1.Enabled:= TRUE;
  Timer1.Enabled:= FALSE;
  Timer1.Enabled:= TRUE;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Caption:= IntToStr(FCounter);
  Timer1.Enabled:= FALSE;
end;

end.
Die dreifache Wertänderung habe ich gemacht um sicher zu gehen, dass in jedem Fall eine Wertänderung eintritt, egal wie Timer1.Enabled im Moment des Buttonclicks besetzt ist. Das Intervall lasse ich auf den standardmäßigen 1000 ms.

Normalerweise müsste sich die Zahl im Fenstercaption immer exakt 1 Sekunde nach dem Buttonclick um 1 erhöhen. Tatsächlich aber scheint es ein Zufallswert zwischen 0 und 1000 ms zu sein.

Jetzt hatte ich auch zuerst Windows im Verdacht. Also virtuelle Maschine geöffnet, da ist ein Win 10 drauf (Host = Win 7). Gleicher Effekt. Jetzt kommts aber: Gehe ich mit der selben EXE auf einen anderen physischen Rechner, läuft es ganz normal.

Jetzt würde mich mal interessieren, wie Windows den Timer bzw. GetTickCount realisiert. Soweit ich weiß sollte das doch ein mehr oder weniger "geeichtes" Signal aus einem Quarz auf dem Mainboard sein, oder? Wenn der einen an der Marmelade hätte, müsste doch auch die Systemzeit aus dem Ruder laufen, und zwar auffallend stark. Die aber scheint keine Probleme zu haben. Selbst dann nicht, wenn ich ein Live-Linux von DVD starte.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat