![]() |
Ein extern erstellerter Thread kann nicht beendet werden
Hallo zusammen,
ich habe eine Anwendung mit sehr vielen Threads. Diese melden sich alle an einem Hauptthread an und wenn die Anwendung beendet wird, geht der Hauptthread seine Liste durch und sagt jedem Thread ".Terminate". Alle "Unterthreads" sind auf "FreeOnTerminate=False" gestellt und der Hauptthread ruft nach dem .Terminate des Unterthreads ein FreeAndNil von dem Unterthread auf. Leider bekomme ich dann die Fehlermeldung: Ein extern erstellter Thread kann nicht beendet werden Kann mir hierzu jemand ein Tip geben, wie das kommen kann? Die freizugebenden Thread-IDs passen zu den Thread-IDs die ich auch erstellt habe. Einige Unterthreads werden durch Komponenten erstellt, welche auf einem Formular liegen. Danke und Gruß |
AW: Ein extern erstellerter Thread kann nicht beendet werden
Zwischen .Terminate() und FreeAndNil musst du warten, dass die Threads auch beendet worden sind, schätze ich. .Terminate() setzt nur das Terminated-Flag am Thread und beendet den Thread nicht - darum musst du dich selber kümmern, in dem du im Thread auf Terminated prüfst und dann die Execute-Methode verlässt.
|
AW: Ein extern erstellerter Thread kann nicht beendet werden
.. gibt es in 2009 TThread.WaitFor noch nicht?
Könnte doch auch genutzt werden - oder? Grüße Klaus |
AW: Ein extern erstellerter Thread kann nicht beendet werden
Hallo,
danke, WaitFor kannte ich noch nicht. Ich habe jetzt eine Schleife, die Terminate aufruft von den Threads. Dann eine Schleife, welche das WaitFor aufruft. Und zum Schluss eine Schleife für FreeAndNil. Dies läuft alles in der Execute Methode von dem Hauptthread. Jetzt bekomme ich beim beenden aber eine Windows-FehlerMeldung: Exception EExternalException in Modul ntdll.dll usw... Hm, irgendwie hat es das noch nicth gebracht oder ich habe was falsch gemacht/verstanden?! Grüße Edit: Mein Fehler. Hatte in einer Komponente auch einen dieser Unterthreads freigegeben. Das habe ich jetzt rausgenommen aber bekomme immernoch die Fehlermeldung wie im Threadtitel beschrieben. Komisch finde ich auch, dass das WaitFor und das FreeAndNil durchgelaufen sind und dann kommt die Komponente mit dem unterlagerten "Unterthread" ins freigeben und wenn ich mir hier ein Haltepunkt rein mache, ist der Thread <> Nil... Komisch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 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