AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Thread mit FreeOnTerminate

Ein Thema von iphi · begonnen am 28. Apr 2021 · letzter Beitrag vom 29. Apr 2021
Antwort Antwort
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#1

AW: Frage zu Thread mit FreeOnTerminate

  Alt 29. Apr 2021, 13:53
Im Hauptprogramm müstest du dann allerdings warten, bis alle Threads beendet sind.
Das ist allerdings nicht so einfach.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#2

AW: Frage zu Thread mit FreeOnTerminate

  Alt 29. Apr 2021, 13:58
Das ist allerdings nicht so einfach.
Jo, "FreeOnTerminate", also kann/darf man nicht von außen prüfen.
Da kann man nur in einer "globalen" Variable/Liste seine aktiven Threads "zählen" und dann warten, bis der Zähler/Liste 0 ist (was vom Thread aus gesetzt wird, wenn er sich beendet).

Die RTL führt am Ende zwar ein Halt aus, was den ganzen Prozess beendet, also auch Threads "abschießt" (damit Windows eben nicht wartet, bis alle Threads beendet sind, inkl. dem Hauptthread),
aber wenn bis dahin beim Beenden die Threads z.B. auf die RTL/VCL zugreifen, aber die Finalization der Units bereits durch sind, auch der Speichermanager (FastMM) sich beendet hat, dann kann es natürlich knallen, drum sollte man oftmals eben auf seine Threads warten, bevor das Beenden des Programms weiterläuft.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Apr 2021 um 14:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Frage zu Thread mit FreeOnTerminate

  Alt 29. Apr 2021, 14:10
Was ich bis jetzt alles gelesen habe ist etwas verwirrend.
Ich bin eh auf Kriegsfuß mit Delphis TThread, nutze nur noch Winapi MSDN-Library durchsuchenCreateThread, da gibt es all diese Probleme nicht.

//edit
da kann ich auch abfragen ob mein thread handle noch existiert ohne irgendwelche probleme zu verursachen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Apr 2021 um 14:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#4

AW: Frage zu Thread mit FreeOnTerminate

  Alt 29. Apr 2021, 14:21
Bei TThread kann man das Handle oder die ThreadID auch prüfen,
aber durch FreeOnTerminate gibt sich der Thread selbst frei.

Und wenn dann in der zwischenzeit ein anderer Thread (egal ob RTL oder WinAPI) gestartet ist und die gleiche ThreadID/Handle hat, dann bringt dir das Prüfen darauf garnichts, weil es eben sein kann, dass es nicht "der" Thread ist.

[edit]
Man könnte das Thread-Handle "dupplizieren", um damit prüfen zu können.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Frage zu Thread mit FreeOnTerminate

  Alt 29. Apr 2021, 14:25
Ich verstehe was Du meinst aber arbeite in meinen Thread code anders, da ist alles unique da ich bei Winapi ja EinSpeziellesThreadHandle: THandle; nutzen muss. Somit habe ich, zumindest für meine Bedürfnisse, immer alles unter Kontrolle.
Gruß vom KodeZwerg
  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 00:13 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