AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ein extern erstellerter Thread kann nicht beendet werden
Thema durchsuchen
Ansicht
Themen-Optionen

Ein extern erstellerter Thread kann nicht beendet werden

Ein Thema von AJ_Oldendorf · begonnen am 29. Jan 2013 · letzter Beitrag vom 29. Jan 2013
Antwort Antwort
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#1

Ein extern erstellerter Thread kann nicht beendet werden

  Alt 29. Jan 2013, 14:14
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ß
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

AW: Ein extern erstellerter Thread kann nicht beendet werden

  Alt 29. Jan 2013, 16:17
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.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Ein extern erstellerter Thread kann nicht beendet werden

  Alt 29. Jan 2013, 16:19
.. gibt es in 2009 TThread.WaitFor noch nicht?
Könnte doch auch genutzt werden - oder?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#4

AW: Ein extern erstellerter Thread kann nicht beendet werden

  Alt 29. Jan 2013, 16:46
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

Geändert von AJ_Oldendorf (29. Jan 2013 um 16:52 Uhr) Grund: Nochmalige Prüfung
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz