TFPTimer ungenau?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Vbxler
Beiträge: 129
Registriert: Sa 25. Mai 2013, 07:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
CPU-Target: 32Bit

TFPTimer ungenau?

Beitrag von Vbxler »

Hallo an Alle,

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.
 
Danke.
Vbxler
-------------------------

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: TFPTimer ungenau?

Beitrag von Bauer321 »

GetTickCount64 ist auch nicht genau.
http://wiki.freepascal.org/QueryPerformanceCounter
www.mcpatcher.net | www.hoeper.me

Antworten