Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TTimer + Schleife (https://www.delphipraxis.net/159688-ttimer-schleife.html)

-187- 8. Apr 2011 02:00

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 ? :)

BUG 8. Apr 2011 02:06

AW: TTimer + Schleife
 
Zitat:

Zitat von -187- (Beitrag 1093827)
Liegt wohl daran das der Hauptthread mit der Schleife beschäftigt ist und somit nicht auf den Timer reagieren kann.

Delphi-Referenz durchsuchenApplication.ProcessMessages

Aber: das hört sich alles irgendwie merkwürdig gelöst an.
Was hast du denn mit der Schleife vor?

-187- 8. Apr 2011 05:44

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

Maik81ftl 9. Apr 2011 13:01

AW: TTimer + Schleife
 
Zitat:

Zitat von -187- (Beitrag 1093831)
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

:cyclops::pale:

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

Sir Rufo 9. Apr 2011 13:33

AW: TTimer + Schleife
 
Zitat:

Zitat von Maik81ftl (Beitrag 1094090)
Zitat:

Zitat von -187- (Beitrag 1093831)
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

:cyclops::pale:

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

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
Zitat:

Zitat von -187- (Beitrag 1093827)
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
Zitat:

Zitat von -187- (Beitrag 1093827)
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
Delphi-Quellcode:
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 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