![]() |
TTimer + Schleife
Moin,
Ich habe eine while-do Schleife. In dieser While do Schleife wird ein Wert abgefragt: if myIntVar=1 then... Diese Variable möchte ich jetzt mit einem Timer alle 20sec immer wieder auf 0 setzen: myIntVar:=0; Solange sich das Programm aber in der Schleife befindet wird das OnTimer Ergeinis nicht ausgelöst. Liegt wohl daran das der Hauptthread mit der Schleife beschäftigt ist und somit nicht auf den Timer reagieren kann. Wie löst ihr sowas ? Extra Thread? Oder hab ich jetzt Quatsch erzählt und es geht doch so wie beschrieben ? :) |
AW: TTimer + Schleife
Zitat:
![]() Aber: das hört sich alles irgendwie merkwürdig gelöst an. Was hast du denn mit der Schleife vor? |
AW: TTimer + Schleife
Moin,
du hast Recht, die Sachlage ist wirklich mehr als nur merkwürdig :) Das "Tool" brauch ich nur für meine privaten Anwendungszwecke sodass eine "dirty Code" Lösung für mich akzeptabel ist. Was ich vor habe? Da müsst ich zuweit ausholen um das Problem genau zu schildern :) Egal, es funktioniert natürlich! Vielen Dank |
AW: TTimer + Schleife
Zitat:
Hier eine kurze Frage nochmal von meine seite? die Schleife, welche verwendet wird ist keine endlosschleife oder doch??? wenn nein, würde ich mit der Zeile Timer1.Enabled:= True spielen. in der Timer Procedure nur einen wert auf 20 stellen und auf "0" zählen lassen denne noch die Abfrage ob Wert = 0, rest erklärt sich denne ggf. von selber. wenn ja, denne halt i mich mal dezent zurück. :D |
AW: TTimer + Schleife
Zitat:
Dein Vorschlag ist keine alternative, bessere Lösung, sondern einfach nur mehr Overhead. Ob es sich um eine Endlosschleife handelt ist völlig unerheblich, da Zitat:
Zitat:
Delphi-Quellcode:
aber auch sowas von gar nichts macht (wenn der Timer schon Enabled ist).
Timer1.Enabled := True;
Um eine Reaktion beim Timer hervorzukitzeln, dann schon
Delphi-Quellcode:
Aber das Event wird auch nur dann ausgelöst, wenn der Hauptthread dafür Zeit hat, was nicht der Fall ist, wenn der Hauptthread gerade eine Schleife ausführt (egal ob Endlos oder nicht).
Timer1.Enabled := False;
Timer1.Enabled := True; Da hilft auf die Schnelle nur ein Application.ProcessMessages (mit allen üblen Nebenwirkungen) Und in vernünftig macht man dafür 2 separate Threads. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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