TTimer [gelöst]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
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:

TTimer [gelöst]

Beitrag von Bauer321 »

Moin,

ich bin gerade voll verwirrt, was muss ich bei nem TTimer einstellen bei Intervall damit er in ms zählt/rechnet was auch immer


Mfg Bauer3211
Zuletzt geändert von Bauer321 am Di 2. Nov 2010, 16:46, insgesamt 1-mal geändert.
www.mcpatcher.net | www.hoeper.me

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: TTimer

Beitrag von Ralph59 »

Hallo,

der Teimer zählt in ms. D.h. 1000 --> 1s.

Wenn Du dir einen Butten erstellst, und dein Timer den Namen Timer1 hat, dann könnteest Du mit
if Timer1.Enabled = true then Timer1.Enabled:=false
else Timer1.Enabled:=true;
den Timer ein und ausschalten.



mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

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: TTimer

Beitrag von Bauer321 »

jo hab ich mir auch so gedacht und habe deshalb mal eins eingegeben. sprich du hast mir das bestätigt was ich auch gedacht habe/gelesen habe aber in meinem untenstehenden code muss dann irgenwas nicht stimmen da nicht beide seiten das selbe anzeigen bzw, bei dem einen ne sekunde ne sekunde ist und beim anderen dauert ne sekunde länger -.-

aber irgendwie geht das alles nicht.

so sieht das programm asu(nur test programm zum vergleich):
http://www5.pic-upload.de/31.10.10/kr6c8qthnla.png
Links ein Timer mit dem Intervall 1000 Rechts ein TImer mit dem Intervall 1.

und das hier ist mein quellcode:
(quellcode verschoben: http://ds.redio.de/lazarus/001.txt)

und wenn ich mich da nicht täusche habe ich das so programmiert, das eigentlich immer in beiden spalten das selbe zur selben zeit erscheinen
Zuletzt geändert von Bauer321 am Di 2. Nov 2010, 16:11, insgesamt 2-mal geändert.
www.mcpatcher.net | www.hoeper.me

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: TTimer

Beitrag von carli »

Ob der Timer die Zeit genau trifft, hängt vom Betriebssystem ab, das du benutzt.
Sinnvoller bei solchen Timern ist, 10 mal in der Sekunde die Anzeige zu aktualiseren und dabei mittels einer GetTickCount-Funktion (oder "now") den tatsächlichen Zeitstand abzufragen. Denn man kann nie genau bestimmen, wann das Betriebssystem die TimeSlice startet und wann der Aufruf das nächste mal drankommt.

Wenn dein System unter Vollast läuft, wirst du sehen, dass der Unterschied noch markanter sein wird.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6859
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TTimer

Beitrag von af0815 »

Ein Timer trifft keine Zeit genau. Du kannst davon ausgehen, das der Timer mindestens x ms wartet bevor er den Event feuert. Je nach Systemlast und Priorität deines Programmes wird dein Event bedient. Somit ist ein Timer nicht geeignet für Zeitzählungen bzw. eine genaue Dauer herangezogen zu werden. Kleiner der ms-Wert umso größer ist die Abweichnung und umsomehr geht der timer 'nach'.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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: TTimer

Beitrag von Bauer321 »

das heißt mein code ist richtig nur kann der timer/pc/die methode zu schlecht

richtig?
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6859
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TTimer

Beitrag von af0815 »

Bauer321 hat geschrieben:das heißt mein code ist richtig nur kann der timer/pc/die methode zu schlecht

richtig?
Nein, du hast eine (für diesen Zweck) nicht taugliche Methode für die Zeitmessungen verwendet.
Anders formuliert: Du hast somit bewiesen, das Timer nicht unmittelbar zur (genauen) Zeitmessung zu gebrauchen sind.

Kurzum: Timer sind keine Uhren.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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: TTimer

Beitrag von Bauer321 »

ok danke
www.mcpatcher.net | www.hoeper.me

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: TTimer

Beitrag von Euklid »

Der Timer eignet sich in der Tat eher zur groben Zeitmessung.

Besser geeignet für schnelle Zeitmessung ist die Funktion gettickcount, vgl. hier: http://www.lazarusforum.de/portal.php?c ... ttickcount" onclick="window.open(this.href);return false;
Wenn die Beschreibung nicht ausreicht, melde Dich einfach nochmal. Mit gettickcount kommst Du auf eine Genauigkeit von ca. 5 Millisekunden. Für noch größere Genauigkeiten muss man auf Systembefehle zurückgreifen. Glaube wir hatten das mal in einem Thread in diesem Forum besprochen (?).

Viele Grüße, Euklid

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: TTimer

Beitrag von Bauer321 »

danke für deine antwort.

aber ich kann deinem link leider nicht sonderlich viel entnehmen: http://www.lazarusforum.de/portal.php?c ... ttickcount

denn da steht ja lediglich das hier:
Declaration

Source position: lclintf.pas line 84

function GetTickCount: DWord;
dem entnehme ich das ich höchstwahrscheinlich lclintf einbinden muss unter uses jedoch kann ich mit function GetTickCount: DWord; leider nicht sonderlich viel anfangen
www.mcpatcher.net | www.hoeper.me

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: TTimer

Beitrag von Teekeks »

Nun, zu beginn deiner Zeitmessung speicherst du das Ergebnis von GetTickCount in einer Variable.

Nach einer gewissen Zeit rufst du GetTickCout noch einmal auf und ziehst davon dein zuerst gespeicherten Wert ab.

Jetzt hast du die Zeitdifferenz in Millisekunden.

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: TTimer

Beitrag von Bauer321 »

sprich so in etwa so oder?

Code: Alles auswählen

uses [...], lclintf;
[...]
var
  Form1: TForm1;
  Time : real;
[...]
Button1.Click[...]
begin
  time := GetTickCount;
end;
[...]
Timer1.Tick //oda so[...]
  var x : integer;
begin
  For x := 1 to 1000 do
    begin
      time := GettickCount - Time;
      if time > 100 
        then exit; // hier bin ich mir nicht sicher wie man das dann nach einer bestimmten zeit beenden könnte
    end;
end;
www.mcpatcher.net | www.hoeper.me

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: TTimer

Beitrag von Teekeks »

Nein.


In etwa so:

Code: Alles auswählen

uses {...}lclinf;
{...}
var
  time:word;
{...}
begin
  time:=GetTickCount;
  {z.B. sowas:}
  sleep(1000);
  writeln('Es sind '+inttostr(gettickcount-time)+' Millisekunden vergangen!');
end;

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: TTimer

Beitrag von Bauer321 »

ok danke dir hab ich mir gleich mal aufgeschrieben
www.mcpatcher.net | www.hoeper.me

Antworten