![]() |
Open-Source-Alternative zum VCL-Timer
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Die Tatsache, dass man mit dem VCL-Timer nicht auf Intervalle im Bereich von 1 ms kommt hat mich veranlasst, selbst einen kleinen Timer zu schreiben. Ich habe nämlich gemerkt, dass das Ruckeln, was mit dem VCL-Timer immer entstand an den hohen Intervallen lag (Man sagt zwar, man kann eh nur 50 Bilder pro Sekunde wahrnehmen, aber bei mir hat's trotzdem immer geruckelt). Mit diesem Timer lässt sich ein Intervall von 1 einstellen, wodurch man in Spielen die Bewegung in Pixel pro Timeraufruf auch runterschrauben kann. Die CPU-Auslastung liegt bei rund 0%. Es handelt sich nicht um eine Komponente, sondern um eine Klasse. Man erstellt einfach eine Instanz dieser Klasse und kann dann auf die vom VCL-Timer gewohnten Elemente Enabled, Interval und OnTimer zugreifen. Ich würde mich über jede Art von Kritik sehr freuen. |
Re: Open-Source-Alternative zum VCL-Timer
Hallo Christian,
entschuldige bitte aber ich stehe gerade etwas auf dem Schlauch, bei einem Standard TTimer kann ich durchaus ein Interval von 1 angeben... :gruebel: |
Re: Open-Source-Alternative zum VCL-Timer
Angeben kannst du ein solch kurzes intervall schon, es wird aber vom Standard-Timer nicht so aufgelöst.
|
Re: Open-Source-Alternative zum VCL-Timer
Ich hab da ein kleines Problem mit der Anwendung des Timers :gruebel:
Also als Ersatz zum TTimer der VCL kann ich den nicht nehmen. Aufgrund der Idee dahinter, um genauer zu sein aufgrund Dieser Methode:
Delphi-Quellcode:
Am Ende siehts dann so aus, dass eine Funktion, die den Timer enabled, nicht zu Ende gefuehrt wird, bis die Applikation terminiert:
procedure TCoesterTimer.Run;
var NextTimerTime: Cardinal; begin NextTimerTime := TimeGetTime + FInterval; while True do begin repeat Application.ProcessMessages; if Application.Terminated then Exit; Sleep(1); until NextTimerTime <= TimeGetTime; FOnTimer; Inc(NextTimerTime, FInterval); end; end;
Delphi-Quellcode:
:?
procedure TCoesterTimer.SetEnabled(Value: Boolean);
var OldInterval: Byte; OldOnTimer: TProcedure; begin //[...] if Value then begin FEnabled := Value; Run; end //[...] Zudem:
Delphi-Quellcode:
Sowas ist schon ziemlich .... :?
Self.Destroy;
Self := TCoesterTimer.Create; Wenn du einen wirklichen Timer programmieren willst, helfen dir vllt. die ![]() greetz Mike |
Re: Open-Source-Alternative zum VCL-Timer
Das der Timer unterhalb von ca. 16 ms versagt, ist eine Windows-Limitation.
Es gibt da aber Multimediatimer, die besser aufloesen. Die JVCL enthaelt einen solchen. |
Re: Open-Source-Alternative zum VCL-Timer
Zitat:
Zitat:
Zitat:
|
Re: Open-Source-Alternative zum VCL-Timer
Nur mal so:
Normale Spiele laufen nicht mit nem Timer, sondern in der Message-Loop, sodass also immer wenn keine anderen Messages da sind, ständig gezeichnet werden kann (while true do Paint;) und wenn Messages da sind (PeekMessage) wird diese Schleife unterbrochen,und nichts mehr gezeichnet. (Bspw. eine Close-Message) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz