ich habe TFPTimer für einen Timerevent verwendet und festgestellt, dass der Ereignisintervall
um 10-20% über der angegebenen Zeit liegt. Habe dann TTimer versucht und der arbeitet exakt.
Hab ich bei der Verwendung des TFPTimer was falsch geamcht:
Code: Alles auswählen
unit frmTimer;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, fpTimer ;
type
TForm1 = class(TForm)
lblTime: TLabel;
Timer1: TTimer;
cmdStart: TButton;
cmdStopp: TButton;
procedure cmdStartClick(Sender: TObject);
procedure cmdStoppClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure OnTick(Sender: TObject);
procedure OnTimer1(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//Timer1 := TTimer.Create(Timer1);
//Timer1.Enabled:= false ;
//Timer1.Interval:= 2500;
//Timer1.OnTimer:= @OnTimer1;
myTimer := TFPTimer.Create(nil);
myTimer.Enabled:= True;
myTimer.Interval:= 2500;
myTimer.OnTimer:= @OnTick;
end;
procedure TForm1.cmdStartClick(Sender: TObject);
begin
//Timer1.Enabled:= True;
myTimer.StartTimer;
end;
procedure TForm1.cmdStoppClick(Sender: TObject);
begin
//Timer1.Enabled:= False;
myTimer.StopTimer;
end;
//diese Ereignis kommt exakt nach 2500ms
procedure TForm1.OnTimer1(Sender: TObject);
const
ZeitAlt : QWord = $0;
iAnzahl : integer = 0;
begin
lblTime.Caption:= 'Timer_' + IntToStr(iAnzahl) + ' - ' + IntToStr(GetTickCount64 - ZeitAlt) + ' ms';
ZeitAlt := GetTickCount64();
inc(iAnzahl);
end;
//diese Ereignis kommt nach ca 2900ms
procedure TForm1.OnTick(Sender: TObject);
const
ZeitAlt : QWord = $0;
iAnzahl : integer = 0;
begin
lblTime.Caption:= 'Timer_' + IntToStr(iAnzahl) + ' - ' + IntToStr(GetTickCount64 - ZeitAlt) + ' ms';
ZeitAlt := GetTickCount64();
inc(iAnzahl);
end;
end.