Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Repeat-Until schleife pausieren und wieder starten
Matty92 - So 02.05.10 20:02
Titel: Repeat-Until schleife pausieren und wieder starten
Hi,
ich sitze jetzt am nächsten Problem, und zwar, wie pausiere ich eine repeat-until schleife, führe anweisungen aus (Sachen ändern, weitere Fenster öffnen oder gar nichts tun) und lasse sie dann weiterlaufen?
Also z.B. ich drücke einen Knopf, pause:=true und das wird dann in der Schleife abgefragt, und falls es zutrifft soll sie pausieren, und wenn pause:=false durch erneutes drücken gesetzt wird, soll die Schleife ganz normal weiterlaufen.
Viele Grüße,
Matty
jaenicke - So 02.05.10 20:26
Das Konzept hört sich sehr seltsam an. Teile lieber deine Schleife auf, Windows und Delphi sind eben ereignisbasiert. Das dann so zu verbiegen macht nur Probleme. ;-)
Eine Möglichkeit ist zum Beispiel eine eigene Klasse, in der der aktuelle Status gespeichert ist. Da kannst du dann immer weitermachen, wenn in der GUI irgendetwas passiert ist.
Genaueres lässt sich so allgemein schlecht sagen, aber die Schleife lässt sich auf jeden Fall auflösen und so das Problem besser lösen. Notlösung wäre tatsächlich mit Application.ProcessMessages und Schleifen zu warten, aber sinnvoll ist es jedenfalls nicht...
Xion - So 02.05.10 20:52
nimm statt der Schleife lieber einen Timer sofern möglich.
jaenicke - So 02.05.10 21:38
Ein Timer ist zwar oft eine Lösung, aber hier bin ich da nicht so sicher. :gruebel:
Schließlich geht es ja nicht primär um eine Zeitverzögerung, oder habe ich da was falsch verstanden?
(Sondern darum Daten eingeben zu lassen oder Fenster anzuzeigen usw.)
Xion - So 02.05.10 21:44
Die Frage ist was gemacht wird. aber ein Timer ist auch sowas wie ne repeat until Schleife, zur Not stellt man das Interval auf 1ms...das ist in 99% aller Fälle dann genau wie ne repeat until Schleife, weil er da auch durchgehend rechnet. Es gibt da aber auch noch diese Sache mit dem OnIdle...
Delphi-Laie - So 02.05.10 22:46
Matty92 hat folgendes geschrieben : |
wie pausiere ich eine repeat-until schleife, führe anweisungen aus (Sachen ändern, weitere Fenster öffnen oder gar nichts tun) und lasse sie dann weiterlaufen? |
Gar nicht, denn der Ansatz ist falsch. Dieses zyklische Abfragen, ob irgendetwas passiert ist, heißt „pollen“ und so ziemlich das dreckigste, was man unter ereignisorientierten Betriebsprogrammen (das die graphischen nach meinem Wissen alle sind) tun kann. Diese Programmiermethode war zu Zeiten von CPM, DOS & Co. nahezu die einzig mögliche und gängige (und ist vielleicht auch heute noch in manchen Textkonsolen bzw. Konsolenprogrammen nötig). Es/sie kostet zudem unnötig Ressourcen. Stell Dir mal vor, auch andere Programme wären so geschrieben. Allein zwei laufende Programme dieser Art könnten den Computer erheblich und mithin deutlich ausbremsen, besonders, wenn er nur einen Prozessor(kern) hat.
Also, Ereignisorientierung, auf Ereignisse zu reagieren - so z.B. auf einen Tastendruck - kann nur der einzig sinnvolle Ansatz sein.
Matty92 - Mi 12.05.10 22:31
Hi,
ok, danke euch :). Die Werte werden gespeichert. Wenn die repeat-until-Schleife beendet wird und später wieder gestartet, wird an der Stelle weitergerechnet an der aufgehört wird.
Das verlangsamen hab ich jetzt mit einem Schieberegler und Sleep gelöst, irgendwie will das Timerprinzip nicht in meine Kopf rein, oder ich mach es wieder zu kompliziert.
Viele Grüße,
Matty
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!