Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Funktion pausieren


Dommel - Mo 23.02.04 14:49
Titel: Funktion pausieren
hi,

ich schreibe gerade an einem Simulationsprogramm für einen Algorithmus. Jetzt habe ich die Frage, ob man die Funktion, die den Algorithmus beinhaltet irgendwie anhalten kann und durch eine andere Funktion (die durch einen Button ausgelöst wird) an der aktuellen Stelle fortsetzen kann.

cu
Dommel

PS: Ich hoffe, dass dies das richtige Forum für meine Frage ist.

Moderiert von user profile iconDeCodeGuru: Topic verschoben


patrick - Mo 23.02.04 17:08

such einmal in der delphi-hilfe nach "break" und "continue"
das dürfte dir weiterhelfen
(sorry, keine zeit mehr für genauere beschreibung...)


Dommel - Mo 23.02.04 17:29

hi,

danke für deine Antwort, werds mir mal angucken

cu
Dommel


Dommel - Mo 23.02.04 17:39

ich glaube, dass 'break' und 'continue' nicht die Befehle sind, die ich suche.

'break' und 'continue' benutzt man ja in Schleifen, um diese zu beenden bzw. an den Anfang der Schleife zu springen.

Ich suche aber ein Befehl, der meine Funktion unterbricht, so dass das eigentliche Programm weiterlaufen kann und man dann mit einem Button die Funktion an der Stelle, wo sie unterbrochen wurde, fortsetzen kann.


KidPaddle - Mo 23.02.04 18:17

Ein normale Funktion kann nicht unterbrochen und später weiter ausgeführt werden. Eine solche Funktionalität kannst Du nur mit einem Thread erreichen, da diese einen eigenen Stackframe und Programm - Counter besitzen. Mit Resume und Suspend kannst Du dann diesen Thread anhalten und Stoppen.

Gruß
KidPaddle


Dommel - Mo 23.02.04 18:28

und wie kann ich so einen Thread erstellen?


Delete - Mo 23.02.04 20:01

http://delphithreads.luckie-online.de


Dommel - Mi 25.02.04 15:39
Titel: DANKE
hi,

danke für das Thread-Tutorial. Es ist zwar etwas umfangreich für meine Zwecke ;) , aber es funktioniert jetzt alles genau so wie ich es mir gedacht hab'.

cu
Dommel


Delete - Mi 25.02.04 21:18

Nur ist es nicht empfehlenswert einen Thread mit Suspend "schlafen" zu legen. Angenommen er befindet sich in einer CriticalSection, dann blockiert er alle anderen Threads auch die auf diese Ressourcen angewiesen sind.


Dommel - Do 26.02.04 14:46

und wie finde ich heraus, ob sich der Thread in einer 'CriticalSection' befindet?

Im Moment habe ich es so gelöst:
Der Thread pausiert sich selbst (mit 'SuspendThread()') nach einem bestimmten Abschnitt des Algorithmus. Per Button wird er dann mit 'ResumeThread()' von meinem Programm fortgesetzt


Delete - Do 26.02.04 16:40

Das wäre zum Beispiel eine Möglichkeit. Da kannst du sicher gehen, dass er in keiner CS ist.


Dommel - Do 26.02.04 16:54

OK, dann kann ich das ja alles so lassen :)
nochmals danke

cu
Dommel