AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Thread weiß nicht, dass er terminiert wurde?!

Thread weiß nicht, dass er terminiert wurde?!

Ein Thema von WorstNightmare · begonnen am 30. Mär 2010 · letzter Beitrag vom 30. Mär 2010
Antwort Antwort
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Thread weiß nicht, dass er terminiert wurde?!

  Alt 30. Mär 2010, 18:15
Hallo,

ich habe mal wieder ein Thread Problem

Damit mein Programm nicht hängt, während eingefügte Links auf ihre Gültigkeit überprüft werden, wird ein Thread gestartet, welcher diese Aufgabe übernimmt.
Seine Funktion an sich erfüllt der Thread sehr gut, allerdings lässt er sich nicht mehr stoppen sobald er am Werk ist :/

Ich versuche so den Thread zu stoppen:
Delphi-Quellcode:
LinkAdder.Terminate;
LinkAdder.WaitFor;
FreeAndNil(LinkAdder);
In der Hauptfunktion des Threads, die durch Execute() aufgerufen wird, läuft eine for-Schleife und bei jedem Link überprüfe ich, ob Terminated wurde. Das Problem ist, dass obwohl von außen Terminate aufgerufen wurde, ist Terminated im Thread, wenn ich es mir ausgeben lasse, noch False. Daher stoppt er nicht.

Weiß jemand woran das liegt und wie man es lösen könnte?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: Thread weiß nicht, dass er terminiert wurde?!

  Alt 30. Mär 2010, 18:34
Vielleicht zeigt LinkAdder nicht auf den richtigen Thread?
Delphi-Quellcode:
while not LinkAdder.Terminated do
  LinkAdder.Terminate;
LinkAdder.WaitFor; // <-- Hier Breakpoint setzen und dann im Thread prüfen
FreeAndNil(LinkAdder);
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Thread weiß nicht, dass er terminiert wurde?!

  Alt 30. Mär 2010, 18:40
Hi,

thread.terminate setzt nur ein Flag, ein while ist hier überflüssig.

ich würde mir gerne mal die Execute anschauen. Wahrscheinlich kommt die gar nicht zu der Abfrage des Flags.
Normalerweise hat man ja keine For Schleife im Thread sondern eine While Schleife:
Delphi-Quellcode:
   while not Terminated do
   begin
     // werkeln
   end;
Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#4

Re: Thread weiß nicht, dass er terminiert wurde?!

  Alt 30. Mär 2010, 19:09
Zitat von Sir Rufo:
Vielleicht zeigt LinkAdder nicht auf den richtigen Thread?
Jetzt wo du es sagst, stimmt.
Ich habe mir mal die ThreadID ausgeben lassen:
Nach dem der Thread suspendiert erstellt wurde und .Start; aufgerufen wurde, ist sie 5012.
In der von Execute aufgerufen Methode ist sie 7700 - beim Beenden jedoch wieder 5012.

Erstellt der Thread automatisch noch einen anderen oder warum ist das so?
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Thread weiß nicht, dass er terminiert wurde?!

  Alt 30. Mär 2010, 19:15
Hi,

das ist aber nicht normal.....
Zeig uns doch mal deine Execute Methode.
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#6

Re: Thread weiß nicht, dass er terminiert wurde?!

  Alt 30. Mär 2010, 19:36
Ah ich habs.
Hatte die ganze Zeit gekuckt, ob irgendwo auf LinkAdder zugegriffen wird.
Allerdings wird in dem Teil, in dem die Links aus einer Datei geladen werden, schon ein Thread erstellt und dann eben noch einmal der "normale".
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Thread weiß nicht, dass er terminiert wurde?!

  Alt 30. Mär 2010, 20:16
.. ist die execute Methode so geheim, dass Du sie nicht zeigen darfst?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Thread weiß nicht, dass er terminiert wurde?!

  Alt 30. Mär 2010, 23:00
Zitat von Klaus01:
.. ist die execute Methode so geheim, dass Du sie nicht zeigen darfst?

Grüße
Klaus
so geheim, er müsste uns schon erschiessen, wenn er nur drüber nachdenkt diese zu zeigen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 20:42 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