![]() |
trotz WaitFor wird nicht gewartet bis Thread beendet ist
Hallo
Ich möchte in meinem Hauptthread warten bis mein Hilfsthread beendet ist. Alles funktioniert ohne Probleme solange ich meine blockierende "Aufräume-Funktion" Close im Hilfsthread nicht aufrufe:
Delphi-Quellcode:
Es scheint als ob WaitFor nicht die Geduld hat bis Close auch beendet ist. In diesem Fall kommt es zu einer AV-Exception. Wenn ich Close auskommeniere funktioniert alles normal...
begin
Hilfsthread.Terminate; Hilfsthread.WaitFor; //alles andere freigeben end; procedure Hilfsthread.Execute; begin while not Terminated do begin //... end; Close; //Aufräumen; ohne diese blockierende Funktion die etwas länger dauert funktioniert alles! end; Soll ich anstelle von WaitFor besser WaitForSingleObject verwenden? Danke und Gruss Tom |
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
Gehört Close zu der Thread-klasse oder zu dem Process/ zuz der Klasse, die den Thread startet?
|
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
Close ist eine Funktion einer Hilfsunit, welche ausschliesslich im Hilfsthread verwendet wird.
|
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
Moin Tom,
wenn ich das richtig sehe, wird die While-Schleife verlassen, wenn der Thread auf Terminated läuft. Auf was sollte WaitFor dann noch warten? |
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
Zitat:
Wenn die While-Schleife durch ist, wird das Close() noch ausgeführ um aufzuräumen. Der Hauptthread soll wohl noc hsolange wartenb, bis auch das fertig ist. |
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
Zitat:
|
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
Moin Zusammen,
da habt ihr mich missverstanden: WaitFor wartet u.a. darauf, dass Terminated = true ist. Dies ist nach Verlassen der While-Schleife der Fall, so dass WaitFor nichts mehr hat, auf dass es warten muss. ;-) |
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
ok, das habe ich tatsächlich falsch verstanden. Ich bin eigentlich davon ausgegangen dass WaitFor wartet bis Execute beendet wird. Da dies offensichtlich nicht der Fall ist, ist auch das Verhalten plausibel.
Gibt es trotzdem eine Lösung für mein Problem? Ich probierte übrigens auch das Close aus dem Hauptthread heraus auszulösen. Da aber unmittelbar anschliessend der Hilfsthread beendet wird, trat das Problem genau gleich auf:
Delphi-Quellcode:
begin
SendCloseToHilfsthread; //Close wird in dem Fall noch in der While-Schleife ausgeführt Hilfsthread.Terminate; Hilfsthread.WaitFor; //alles andere freigeben end; |
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
Moin Tom,
Zitat:
|
Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist
Hallo Chris
Ich denke das würde sich sicher finden lassen. Das heisst aber das ich Terminate und WaitFor gar nicht mehr verwende... Was ist denn überhaupt der Sinn dahinter?? Danke und Gruss Tom |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 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