Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTimer anhalten und weiterlaufen lassen (https://www.delphipraxis.net/130163-ttimer-anhalten-und-weiterlaufen-lassen.html)

Digielm 4. Mär 2009 10:49


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

himitsu 4. Mär 2009 10:53

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.

Luckie 4. Mär 2009 10:54

Re: TTimer anhalten und weiterlaufen lassen
 
Dann merk dir doch in einer globalen Varaible, wo dein Timer zu letzt war.

himitsu 4. Mär 2009 10:59

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?

Digielm 4. Mär 2009 11:40

Re: TTimer anhalten und weiterlaufen lassen
 
In den events werden Datenbank abgleiche durchgeführt

Luckie 4. Mär 2009 11:55

Re: TTimer anhalten und weiterlaufen lassen
 
Zitat:

Zitat von himitsu
ich wüßte aber nicht wie man auslesen kann wo der Timer grad steht

Ich weiß auch gar bnicht, was er damit meint. Ich bin davon ausgegangen, dass er irgendwa smacht und das könnte man mit zählen un dsich merken.

HappyJoe 4. Mär 2009 14:27

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

Reinhard Kern 4. Mär 2009 14:56

Re: TTimer anhalten und weiterlaufen lassen
 
Zitat:

Zitat von Digielm
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.

Hallo,

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

himitsu 4. Mär 2009 16:09

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 22:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz