Autor Beitrag
tortom1000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: 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 user profile iconNarses: Beitragsformatierung überarbeitet.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :gruebel:

Ä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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: 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 user profile iconNarses: Beitragsformatierung überarbeitet.
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :nixweiss: