![]() |
Thread anhalten
Hallo,
wie gibt man einen TThread in den Suspend Modus, wenn nicht mit der veralteten MyThread.Suspend Methode? Ich lese immer wieder etwas über Nachrichten an den Thread senden, aber wie das konkret funktioniert, habe ich nicht finden können. Vielen Dank im Voraus M. Wilms |
AW: Thread anhalten
Einen Thread extern suspenden ist gelinde gesagt gefährlich:
Falls er z.b. inmitten einer memory alloc prozedur suspended wird (oder z.b. bei einer string operation) steht das komplette Programm... Also mir fallen mal schnell 2 Methoden ein: * Einen Event der mit waitfor wartet und auf ein Signal wartet um dann weiter zu machen. * Einfach ein Flag setzen und den Thread sich selbst suspenden lassen Ich persöhnlich mache es eigentlich immer mit einem Event.... |
AW: Thread anhalten
Hallo,
es kommt ein wenig darauf an, was der Thread genau macht. Ggf. kann man auch mit GetMessage im Execute arbeiten. Man könnte ein von außen setzbares Bool'sches Flag "SuspendFlag" im Execute abfragen und wenn das true wird, ruft man GetMessage auf. Schickt jemand von außen dann eine Nachricht an dne Thread, läuft der wieder weiter. Dann setzt man auch das Flag zurück. Achtung: das muss man natürlich auch zum Beenden tun, falls der gerade suspendet ist. Das mit der Nachricht funktioniert aber nur unter Windows so. Grüße TurboMagic |
AW: Thread anhalten
Ist es sicher, die Suspend Methode in der Schleife der Execute Procedure bei extern gesetztem Flag aufzurufen, falls aktuell nichts ausgeführt wird?
|
AW: Thread anhalten
Wenn der Code innerhalb eines Threads die Haltefunktion aufruft, dann kann, zu dieser Zeit, garnichts anders "Schlimmes" in diesem Thread laufen,
also kann es nur sicher sein, so lange es möglich ist es von Extern wieder fortsetzen zu können. OK, außer man ist so doof und schreibt seinen Code so, dass diese Haltefunktion mitten innerhalb einer Sperre ausgeführt wird. Wenn man aber von außerhalb einen Thread anhält, dann weiß man garnicht wo der Thread gerade etwas macht und somit ist es per se unsicher, da es immer auch eine noch so geringe Chance gibt, das es etwas Schlimmes sein kann. z.B. eine CriticalSection, welche globale Dinge sperrt, wie unseren Speichermanager. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz