![]() |
TTimer anhalten und weiterlaufen lassen
Hallo Leute
habe zu der Timer Komponente eine Frage. ich habe 3 Timer auf meiner Form laufen. folgendes Problem. 1. Timer hat ein Event. Tool läuft. währenddessen bekommt auch der 2. Timer das Event zur Verarbeitung darf aber nicht starten bevor das 1. Timerevent nicht abgearbeitet ist. genauso verhält es sich mit dem dritten timer. Es darf also immer nur ein event ausgeführt werden. Kann mir jemand helfen um das zu realisieren. Mein Problem dabei ist wenn ich ttimer.enabeld := false und dann wieder true setze fängt der ja wieder bei 0 an oder kann ich den einfach nur pausieren, damit er dann an der stelle weitermacht wo er war. Danke im Voraus auf Antworten |
Re: TTimer anhalten und weiterlaufen lassen
die Timer-Events werden über Windows-Messages gehandhabt
und diese werden nur nacheinander abgearbeitet. Es sei denn du veranlaßt zwischendurch selber die Verarbeitung dieser Nachrichten. (z.B. via Application.ProgressMessages oder den Sleep-Ersatz Delay) Heißt, solange du nichts machts, was wärend der Eventbearbeitung die Verarbeitung der Messages veranlaßt, warten die anderen Timer. |
Re: TTimer anhalten und weiterlaufen lassen
Dann merk dir doch in einer globalen Varaible, wo dein Timer zu letzt war.
|
Re: TTimer anhalten und weiterlaufen lassen
ich wüßte aber nicht wie man auslesen kann wo der Timer grad steht (also vor wievielen Millisekunden der das letze Mal ausgeführt wurde) ... daß müßte man dann schon selber im Timer-Event speichern.
Aber wie gesagt ... solange man die Nachrichtenverarbeitung nicht beeinflußt, kann es eigentlich nicht passieren, daß 2 Timer-Events gleichzeitig ausgeführt werden. Was machst du denn alles in diesen Events? |
Re: TTimer anhalten und weiterlaufen lassen
In den events werden Datenbank abgleiche durchgeführt
|
Re: TTimer anhalten und weiterlaufen lassen
Zitat:
|
Re: TTimer anhalten und weiterlaufen lassen
Ich weiß nicht, ob ich dich richtig verstanden habe, aber versuche es doch mal mit einer eigenen Pseudo-Nachrichtenschlange.
Nehme ein TEdit Text=''. Wenn der 1. Timer auslöst, hänge an Text die '1' an. Durch OnChange wird die eigentliche Bearbeitungroutine aufgerufen. Irgendwann löst Timer 2 aus während 1 noch nicht beendet ist, folglich ist Text ='12'. OnChange ruft die Behandlungsroutine auf, da jedoch die 1. Ziffer nicht 2 ist, passiert nichts. Irgenwann ist 1 fertig und löscht die 1. Pos von Text. OnChange ruft die Behandlungsroutine auf, diesmal ist die 1. Stelle = 2 für die 2. Behandlungsroutine. ... |
Re: TTimer anhalten und weiterlaufen lassen
Zitat:
das geht so nicht und es wird auch üblicherweise nicht so gemacht. Ich verwende in solchen Fällen einen Timer, der ein Zeitraster lifert, z.B. 1 Sec. Im Timerevent werden dann "Software-Timer" heruntergezählt, das sind einfach Zählvariablen - soll etwas alle 30 sec passieren, wird also der Zähler auf 30 gesetzt und in jedem 1 sec-Event um 1 heruntergezählt, ist null erreicht, wird die Massnahme ausgelöst und der Timer wieder auf 30 gesetzt. So kann man mit einem Timer ohne weiteres 10 oder mehr Ablaufzeiten erzeugen/überwachen. Gruss Reinhard |
Re: TTimer anhalten und weiterlaufen lassen
Liste der Anhänge anzeigen (Anzahl: 1)
Wie gesagt, wärend ein Timerereignis läuft und darin nicht irgendwo die Nachrichtenschleife abgearbeitet wird, dann stehen andere Timer (so wie eigentlich die ganze VCL sonnst stollsteht)
> siehe TimerA im Beispiel Wenn wärendessen die Nachrichtenschleife abgearbeitet wird, dann können auch andere Timerereignsisse eintreten. > siehe TimerC im Beispiel > TimerB ist sozusagen als zusätzlicher Timer vorgesehn, > wobei auch TimerA zeitlich wärend TimerC ausgeführt werden kann. = TimerA läuft immer alleine = TimerB auch = TimerC nicht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 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