Autor |
Beitrag |
tortom1000
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: Mo 04.08.14 12:20
Hallo,
brauche mal wieder eure Hilfe...
Wie kann ich innerhalb einer Repeat/Until-Schleife das Programm für eine unbestimmte Zeit anhalten, bis auf einen Button geklickt wird? (Auch die Timer sollten nicht weiter ausgeführt werden.)
Gibt es dafür einen Standard-Befehl oder muss ich mir dafür selbst etwas basteln?
Variable programmpause auf true setzen, Programm-Code innerhalb der Schleife mittels If programmpause=true then ..... abfragen und dementsprechend ausführen oder übergehen... Alle Timer deaktivieren und erst wieder aktivieren nach Buttonklick...
Vielleicht geht's ja einfacher.
Gruß
Tortom
Moderiert von Narses: Beitragsformatierung überarbeitet.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 04.08.14 13:09
Einen "Standardbefehl" wie Du ihn Dir vorstellst, gibt es nicht.
Die richtige Antworte wäre vermutlich, die Arbeit in einen Thread zu verpacken. Den kann man schön pausieren. Aber aus Deiner Fragestellung entnehme ich, dass das vielleicht noch eine etwas hoch gegriffene Lösung für Dich ist.
Von daher solltest Du vermutlich wirklich die Idee mit der Variable Programmpause erst einmal umsetzen.
Oder Du erzählst etwas genauer, was Du da eigentlich machst. Dann kann man vielleicht eine bessere Lösung vorschlagen.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 04.08.14 13:33
Theoretisch kannst du z.B. die WndProc überschreiben und alle WM_TIMER Nachrichten einfach verwerfen.
Ich glaube aber auch nicht, dass das wirklich die beste Lösung für dein Problem ist. Das hört sich eher nach einer Notlösung an.
Ähnliche Probleme kenne ich, wenn jemand Probleme mit der eventbasierten Programmierung hat. Denn unter Windows ist dieses Anhalten etwas, das viele machen, die einen Quelltext der Reihe nach abarbeiten wollen wie unter DOS. Unter Windows reagiert man aber auf Events und führt dann eine weitere Aufgabe aus.
Ob das auf dich zutrifft, lässt sich bei den spärlichen Informationen natürlich nicht sagen.
|
|
tortom1000 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: Mo 04.08.14 15:57
Hallo,
erst mal vielen Dank für eure Statements.
Ich habe mir das schon gedacht, das es nicht ganz so einfach ist.
Ich denke, ich werde das Programm umbauen, damit die Variante mit der Variablen greift.
Wollte nur auf Nummer sicher gehen, das es da nichts einfacheres gibt...
Nochmals vielen Dank
Tortom
Moderiert von Narses: Beitragsformatierung überarbeitet.
|
|
GuaAck
      
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Mo 04.08.14 21:02
Hallo tortom1000,
je nach dem, was in der REPEAT-UNTIL-Schleife gemacht wird, kann eine Application.processmessages nötig sein, damit neue Events überhaupt abgefragt werden. Bei kurzen Schleifen baue ich meist einen Zähler ein, so dass der Aufruf nur bei jedem x-ten Durchlauf gemacht wird, sonst kostet es zu viel Rechenzeit. Wenn man den Zähler so tuned, dass mehrmals pro Sekunde das Processmessages ausgeführt wird, dann hat man kaum CPU-Last und auch eine gute Reaktionzeit des Systems.
Probiere aber mal, es mit einem TThread zu machen, nach etwa Einarbeitung ist es viel einfacher als dieses Zähler-Tuning. Wenn Du damit anfängst, dann erhältst Du viele Hinweise, dass Du aus dem Thread nicht ohne besondere Synchronisierung auf visuelle Komponenten des MainForms zugreifen darfst. Kümmere Dich darum zunächst nicht, es geht wahrscheinlich auch so gut brauchbar. (Um nicht falsch verstanden zu werden: Hier geht es um den Einstieg in Threads, nicht um die Erstellung robuster und zuverlässiger Programme!).
Viel Erfolg,
Gruß
GuaAck
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 04.08.14 22:09
Eigentlich hört sich das so an als bräuchte man weder einen Thread noch die Schleife, aber ohne weitere Informationen können wir das nicht wissen oder etwas dazu sagen. 
|
|
|