TTimer [gelöst]
-
- 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]
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
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
-
- 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
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
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.
-
- 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
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
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
-
- 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
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.
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.
- 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
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).
-
- 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
das heißt mein code ist richtig nur kann der timer/pc/die methode zu schlecht
richtig?
richtig?
www.mcpatcher.net | www.hoeper.me
- 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
Nein, du hast eine (für diesen Zweck) nicht taugliche Methode für die Zeitmessungen verwendet.Bauer321 hat geschrieben:das heißt mein code ist richtig nur kann der timer/pc/die methode zu schlecht
richtig?
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).
-
- 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
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
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
-
- 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
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:
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:
dem entnehme ich das ich höchstwahrscheinlich lclintf einbinden muss unter uses jedoch kann ich mit function GetTickCount: DWord; leider nicht sonderlich viel anfangenDeclaration
Source position: lclintf.pas line 84
function GetTickCount: DWord;
www.mcpatcher.net | www.hoeper.me
-
- 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
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.
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.
-
- 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
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
-
- 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
Nein.
In etwa so:
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;