AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Thread sauber Beenden ? Handle ungültig.
Thema durchsuchen
Ansicht
Themen-Optionen

Thread sauber Beenden ? Handle ungültig.

Ein Thema von El.Blindo · begonnen am 29. Jan 2008 · letzter Beitrag vom 17. Mär 2008
 
Andy090778

Registriert seit: 13. Mai 2006
23 Beiträge
 
Delphi 5 Standard
 
#6

Re: Thread sauber Beenden ? Handle ungültig.

  Alt 29. Jan 2008, 22:48
Ich hatte auch schon mal Probleme beim Ausführen von Code nach dem Beenden durch ein Terminate bzw. ein Free.

Mein Fazit:
  • - Ohne WaitFor darf man kein Thread manuell beenden. Klingt logisch, vor allem dann wenn der Thread Daten mit irgendwas anderem syncronisiert. Somit ist sichergestellt, dass alle Syncronized-Beziehungen beendet wurden.
  • - Aufräumarbeiten hab ich strikt in OnTerminated-Ereignis benutzt. Da ich sowieso außerhalb des Threads die Strukturen und Daten bereitstelle, hatte ich da kein Problem. Wenn Du eine Komponente machen möchtest, kannst Du ja trotzdem den Code in eine andere Unit packen.

Hier nochmal die Beschreibung aud Delphi:
Mit WaitFor ermitteln Sie den Wert von ReturnValue, wenn die Ausführung des Thread beendet ist. WaitFor kehrt erst zurück, wenn der Thread beendet ist. Dazu muß der Thread entweder die Methode Execute abschließen oder die Beendigung einleiten, sobald die Eigenschaft Terminated den Wert True annimmt.

Das fette ist der springende Punkt. Ich vermute mal bis die 1000ms Wartezeit vergehen, ist das Terminated Bit schon gesetzt und die internen Daten sind freigegeben. Dann ist auch Dein Handle nicht mehr gültig.

Abhilfe:

Ich würde ganz einfach mal:
Delphi-Quellcode:
    PdhCloseQuery(HQ);
    FreeLibrary(hPDH);
in eine Prozedur verschieben, die Du in der Prozedur Create an OnTerminate hängst.

Und aus
Array[1..4] of TPDHInfo würd ich auch ein Typ machen.

So lass ich zb. in einem Rechnungsprogramm verzögert die Daten aus einer Datenbank lesen und in ein Listview schreiben. Und der Benutzer kann jederzeit durch ESC o.ä. den Vorgang abbrechen.

Andreas
Andreas
  Mit Zitat antworten Zitat
 


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 08:31 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