![]() |
Alle subThreads beenden beim programm beenden
Hi,
gibt es eine komfortablere möglichkeit, alle threads einer anwendung zu beenden, als deren handle beim starten zu sichern und dann in einer for - schleife zu beenden? *MFG* |
Re: Alle subThreads beenden beim programm beenden
Mit oder ohne VCL?
Egal wie sollte man es so programmieren, dass sich ein Thread selber beendet. Also im Thread in der Schleife einen Flag prüfen und wennd er einen bestimmten Wert hat die Schleife verlassen. Dieses Flag kannst du beim Programm Ende setzten. |
Re: Alle subThreads beenden beim programm beenden
aber die Threads gehören zu einem Prozess
wenn der Prozess gekillt wird, werden auch die Threads zum Prozess vom Betriebssystem terminiert oder gibts da noch was zu beachten |
Re: Alle subThreads beenden beim programm beenden
Saubere wäre es wohl, wenn sich die Threads alle vorher selber sauber beenden. Dass die Threads automatisch terminiert werden ist logisch. Wenn du den Prozess beendest, ziehst du ihnen ja praktisch den Teppich unter den Füßen weg. Ein Prozess ist nichts anderes als ein Container, der den Adressraum usw. bereitstellt.
|
Re: Alle subThreads beenden beim programm beenden
Du könntest Probleme bekommen wenn dein Thread eine Datei schreibt oder liest...
|
Re: Alle subThreads beenden beim programm beenden
Hallo Trifid,
Zitat:
Ich habe das Zippen mit TP-Abbrevia in einen Thread ausgelagert, und meine, dass wenn ich beim Beenden des Prozesses nicht auf das Threadende warte bzw. ihn nicht vorsätzlich terminiere, dass dann der Thread weiterläuft, bzw. es zu "Seiteneffekten" (Exceptions) kommt... |
Re: Alle subThreads beenden beim programm beenden
@APP
Zitat:
ein NEIN bei Verwendung mit dem Delphi-Objekt TThread ein JA mit den API's (CreateThread, ...) mit C,C++ hatte ich weniger Probleme als bei Delphi Zitat:
(was aber nicht heisst, dass die Threads sauber beendet werden können) also dürfte es nur daran liegen was GeorgeWNewbie geschildert hat. Ich habe mir angewöhnt immer an die entscheidenden Stellen ein WaitForSingleObject oder WaitForMultipleObjects zu stellen. (z.B. beim FormClose) Verwendest Du das TThread-Objekt - da ist bei Terminierung ein Bug enthalten |
Re: Alle subThreads beenden beim programm beenden
@APP: Ein Thread ist ohne Prozess nicht lebensfähig! Da gibt es nichts dran zu rütteln. Aber wie geasgt, es könnte sein, dass es kracht, weil wenn du den Prozess beendest, dann nimmst du einen laufenden Thread seine Lebensgrundlage und manche finden das wohl nicht so toll und wehren sich vor ihrem Tod eben. ;)
|
Re: Alle subThreads beenden beim programm beenden
Hallo Trifid,
Zitat:
@Trifid, @Luckie, Ich habe obiges Posting "aus dem Bauch heraus" geschrieben, nachdem ich um 2.00 Uhr früh in meine Fa. musste, und mir eine Wartezeit mit der DP verkürzte -da war ich mir auch nicht sicher, ich beschrieb nur meine Erfahrungen die ich mit Threads hatte. Nun ließ mir das keine Ruhe und ich begann nachzulesen: Andreas Kosch schreibt in "Delphi Win32 Lösungen" (Seite 298) folgendes: Zitat:
und zwar unabhängig davon ob der Thread mit dem TThread Objekt oder durch die WinAPI erzeugt wurde. |
Re: Alle subThreads beenden beim programm beenden
Jupp, davon war aber gar nicht die Rede. Ein Thread-Handle kannst du sofort schließen, wenn du es nicht mehr brauchst. Mache ich in der Regel auch immer so, damit ich es nicht vergesse.
Ich benutze es meist nur, um zu kucken, ob alles geklappt hat:
Delphi-Quellcode:
// Thread gleich starten
hThread := BeginThread(nil, 0, @Thread, ThreadParams, 0, ThreadID); // wenn hThread <> 0 hat alles geklappt if hThread <> 0 then begin // nicht mehr benötigtes Thread-Handle schließen CloseHandle(hThread); // Schalflächen aktivieren / deaktivieren Button1.Enabled := False; Button2.Enabled := True; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 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