AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi "Delphi 7" Thread beenden nicht immer möglich

"Delphi 7" Thread beenden nicht immer möglich

Ein Thema von Hobbycoder · begonnen am 6. Sep 2018 · letzter Beitrag vom 6. Sep 2018
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#1

"Delphi 7" Thread beenden nicht immer möglich

  Alt 6. Sep 2018, 11:04
Ich kämpfe gerade damit unter Delphi 7 einen Thread sicher zu beenden. Manchmal klappt's, manchmal nicht.
Beendet werden soll im OnFormClose.

Ich habe jetzt mehrere Varianten ausprobiert, aber ich lande immer beim gleichen Problem.

Es kommt immer die Meldung:
Zitat:
Im Projekt xxx.exe ist eine Exception der Klasse EAccessViolation aufgetreten: Meldung: 'Zugriffsverletzung bei Adresse 5F965130. Lesen der Adresse 5F965130'. Der Process wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Ich lande daraufhin in der Classes.pas in der function ThreadProc(Thread: TThread): integer; Siehe Bild im Anhang.

Folgende Varianten habe ich ausprobiert:
A:
Delphi-Quellcode:
    if ThreadUpdatePanel<>nil then begin
      ThreadUpdatePanel.FreeOnTerminate:=False;
      ThreadUpdatePanel.Terminate;
      while (True) do begin
        KillThreadResult:=WaitForSingleObject(ThreadUpdatePanel.Handle, Timeout);
        if KillThreadResult = WAIT_FAILED then
          RaiseLastOSError;
        if KillThreadResult = WAIT_OBJECT_0 then
          Break;
      end;
    end;
B:
Delphi-Quellcode:
  if ThreadUpdatePanel<>nil then
  begin
    ThreadUpdatePanel.Terminate;
    ThreadUpdatePanel.WaitFor;
  end;
C:
Message per PostMessage an Thread und ihn sich selbst beenden lassen.

Ich habe es sowohl mit FreeOnTreminate=True als auch mit FreeOnTerminate=False ausporbiert.

Ich habe auch mal das Timeout für Variante A auf 5000 MS hochgesetzt, aber die Fehlermeldung kommt sofort. Es macht den Eindruck als würde der Thread beendet.

Wenn ich dann die Anwendung über Start fortsetze, erscheint ganz kurz das madExcept-Fenster und dann wird die Anwendung beendet.

Irgendwelche Ideen?
Miniaturansicht angehängter Grafiken
classes.png  
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
129 Beiträge
 
Delphi 12 Athens
 
#2

AW: "Delphi 7" Thread beenden nicht immer möglich

  Alt 6. Sep 2018, 12:28
Hallo,

wie sieht den die Execute-Methode des Threads aus?

Kann es sein, dass der Thread schon nicht mehr existiert wenn Du ihn in onFormClose beenden willst?
Die Objektvariable für den Thread muss nicht NIL sein wenn der Thread beendet wurde.

Eine andere Möglichkeit wäre, dass der Thread noch auf Bereiche zugreift die nicht mehr existieren.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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