AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi trotz WaitFor wird nicht gewartet bis Thread beendet ist
Thema durchsuchen
Ansicht
Themen-Optionen

trotz WaitFor wird nicht gewartet bis Thread beendet ist

Ein Thema von TomDooley · begonnen am 4. Jul 2006 · letzter Beitrag vom 5. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#1

trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 14:12
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:
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;
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...

Soll ich anstelle von WaitFor besser WaitForSingleObject verwenden?

Danke und Gruss

Tom
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 14:22
Gehört Close zu der Thread-klasse oder zu dem Process/ zuz der Klasse, die den Thread startet?
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#3

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 14:28
Close ist eine Funktion einer Hilfsunit, welche ausschliesslich im Hilfsthread verwendet wird.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 14:31
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?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#5

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 14:37
Zitat von Christian Seehase:
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?

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.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#6

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 14:49
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.
genau so!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 15:09
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#8

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 15:27
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;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 15:29
Moin Tom,

Zitat von TomDooley:
Gibt es trotzdem eine Lösung für mein Problem?
Kannst Du nicht eine andere Abbruchbedingung für die Schleife finden?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#10

Re: trotz WaitFor wird nicht gewartet bis Thread beendet ist

  Alt 4. Jul 2006, 16:21
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:59 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