Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TTimer + Schleife

  Alt 9. Apr 2011, 13:33
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


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.
Er hat einen (üblen) Hack als Lösung.

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
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.
und trotzdem soll egal was kommt oder gerade läuft
Diese Variable möchte ich jetzt mit einem Timer alle 20sec immer wieder auf 0 setzen: myIntVar:=0;
Darum bringt dein Vorschlag keine Verbesserung, vor allem weil Timer1.Enabled := True; aber auch sowas von gar nichts macht (wenn der Timer schon Enabled ist).

Um eine Reaktion beim Timer hervorzukitzeln, dann schon
Delphi-Quellcode:
Timer1.Enabled := False;
Timer1.Enabled := True;
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).
Da hilft auf die Schnelle nur ein Application.ProcessMessages (mit allen üblen Nebenwirkungen)
Und in vernünftig macht man dafür 2 separate Threads.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat