Entwickler-Ecke

Sonstiges (Delphi) - Prozesse abbrechen


>spEEd> - Di 16.05.06 14:34
Titel: Prozesse abbrechen
Hi,

sofern ich das richtig verstanden habe, hält Application.Processmessages; das Programm so lange an, bis alle Prozesse, die im Hintergund (z.B. in Prozeduren) ablaufen, von dem Computer abgearbeitet wurden. Gibt es auch die Möglichkeit diese Prozesse abzubrechen?

>spEEd>


Moderiert von user profile iconChristian S.: Topic aus Sonstiges (Delphi) verschoben am Di 16.05.2006 um 14:37
Moderiert von user profile iconGausi: Topic aus Windows API verschoben am Di 16.05.2006 um 15:13


jasocul - Di 16.05.06 14:39

Suche nach Suche in der Entwickler-Ecke KILLPROCESS findet brauchbare Treffer.


F34r0fTh3D4rk - Di 16.05.06 14:42

ich glaube nicht, dass er das meint, er spricht ja von prozeduren


Gausi - Di 16.05.06 14:48

Ich glaube, das hast du falsch verstanden. Oder ich habe dich falsch verstanden. In einem Programm läuft immer nur ein Prozess (ist evtl. nicht der richtige Begriff) ab (es sein denn, man verwendet Threads). Wenn eine Prozdur OnKlickIrgendwas ausgeführt wird, und in dieser Zeit z.B. auch ein Timer sein Intervall beendet und eigentlich was anderes tun möchte, dann muss der Timer so lange warten, bis die OnKlick-Prozedur fertig ist.

Ein "Vordrängeln" ist möglich, wenn man z.B. in die OnKlick-Prozedur an einigen Stellen ein Application.ProcessMessages aufruft. Das bewirkt, dass die Nachrichtenschleife des Programms verarbeitet wird. In die Nachrichtenschleife kommt z.B. rein, wenn der User in der Zwischenzeit einen anderen Knopf gedrückt hat, oder sich der Timer gemeldet hat.

Das heisst: Application.Processmessages hält nicht das Programm an, bis alle laufenden Prozesse beendet sind, sondern hält die laufende Berechnung an und schiebt die Verarbeitung der Nachrichten (z.B. Usereingaben) an das Programm dazwischen.


jasocul - Di 16.05.06 14:49

Könnte auch sein. Ich habe als Ausgangspunkt meiner Überlegungen "Application.ProcessMessages" genommen. :?


>spEEd> - Di 16.05.06 14:59

Vielleicht hab ich mich einfach nur ein wenig missverständlich ausgedrückt...
Ich möchte nur die Prozesse, die in meinem Programm ausgeführt werden abbrechen. Beispiel: Ich habe eine Endlos-Schleife in meinem Programm und möchte, dass bei einem Mausklick alles abgebrochen wird, was das Programm bearbeitet (also auch diese Endlos-Schleife).
Ich weiß nicht, ob es hierfür eine Lösung gibt, allerdings könnte ich dadurch Änderungen der Kamera-Ansicht bei meinem 3D-Programm wesentlich schneller berechnen lassen.


Gausi - Di 16.05.06 15:11

Das lässt sich z.B. mit einer globalen Variable machen (oder einer Eigenschaft der Form).

In der Endlossschleife setzt du erstens alle paar Durchläufe ein Application.processmessages, gefolgt von einem if Abbrechen then break;. Ins OnClick des Abbrechen-Buttons kommt dann ein Abbrechen := True;.
Vor Beginn der Rechnung/Schleife muss natürlich "Abbrechen" wieder auf False gesetzt werden.

Aber das hat nichts mehr mit Winapi zutun (*zurückverschieb*)


>spEEd> - Di 16.05.06 15:25

Ich habe in meinem Programm leider zu viele Prozeduren, Funktionen und Schleifen, um überall die IF-Abfrage mit einzubauen. Schade, dass es dafür keine weitere Möglichkeit gibt, aber trotzdem vielen Dank an alle für eure Hilfe!

>spEEd>