AGB  ·  Datenschutz  ·  Impressum  







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

Wie Threads beenden und freigeben?

Ein Thema von DCoderHH · begonnen am 1. Dez 2016 · letzter Beitrag vom 1. Dez 2016
Antwort Antwort
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#1

AW: Thread

  Alt 1. Dez 2016, 16:11
Du könntest nach dem Starten eines Threads alle anderen Threads aus der Threadliste löschen.
Welchen Zweck hätte das? Dann weiß ich beim Beenden des Programms nicht mehr, welche Threads noch laufen und kann sie dann nicht mehr beenden.
Zitat:
Immer wenn einen neue Instanz erzeugt/gestartet wird, sollen alle anderen Threads beendet und *freigegeben* werden.
Irgendwie widersprichst du dir da gerade. Wenn ein Thread gestartet wird, geht er alle anderen Threads in der Liste durch, beendet sie und löscht sie aus der Liste. Was ist da jetzt das Problem?
Es ist kein Widerspruch:

Zitat:
Immer wenn einen neue Instanz erzeugt/gestartet wird, sollen alle anderen Threads beendet und *freigegeben* werden.
Dort wird und soll nicht darauf gewaret, dass die Threads wirklich beenden und freigegeben sind. Zu dem Zeiptunkt ist also nur der Wunsch an die Threads mitgeteilt worden, dass ich sie beenden möchten. Sie könnten dann aber noch laufen, während ich das Programm beenden möchte. Das Programm darf dann aber nicht beendet werden, weil die Threds noch laufen. Also muss ich hier die List haben um nachschauen zu können, ob die Threads noch laufen oder nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.809 Beiträge
 
Delphi 12 Athens
 
#2

AW: Thread

  Alt 1. Dez 2016, 16:16
Threads haben zusätzlich zur Terminated noch die Finished Property. Die könntest Du abfragen, und jeden Thread, der Finished ist freigeben. Denn Terminated gibt eigentlich nur an, daß ein Thread den Terminate Befehl bekommen hat.

Und ein Thread.Free darfst Du beim entfernen aus der Liste auch machen.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Klaus01

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

AW: Thread

  Alt 1. Dez 2016, 16:18
.. Du könntest das onTerminate Ereignis verwenden.
Damit könnte der Thread eine Nachricht absetzen wenn er beendet wird.
Die Nachricht könnte dein Haptprogramm veranlassen den Thread aus der Liste zu entfernen.
Das machst Du doch schon - wo ist dann das Problem?
Ja ich entferne den Thread aus der Liste. Das ist aber nur die halbe Miete. Er soll auch freigegeben werden. Kann er aber nicht, da man free() in OnTerminate nicht aufrufen kann.
.. wenn die Liste leer ist - laufen keine Threads mehr,
denn du löscht den Thread aus der Liste wenn er sich beendigt hat.

Wie der Name schon sagt FreeOnTerminate wird der Thread freigegeben wenn er beendet ist.
Da musst Du nichts mehr freigeben.

Grüße
Klaus
Klaus
  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 05:41 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 by Thomas Breitkreuz