Autor Beitrag
Daimonion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Do 12.06.08 10:56 
Hallo Leute.

Bei mir kommt es ab und zu mal vor, das sich ein Thread irgendwo aufhängt und nicht mehr weiterkommt. Ich kann die genaue Stelle nicht lokalisieren, aber ich weiß das der Thread nicht mehr korrekt arbeitet. Und würde die Prozedur dann gerne neu starten bzw. einen Fehler ausgeben und den Thread beenden.
Jetzt wollte ich ihn mittels Threadname.Terminate beenden aber wie ich in dem Debugfenster Threads erkenne wird er nicht beendet. Wahrscheinlich weil er irgendwo hängt und die Methode Terminate wird nicht ausgeführt werden kann.

Gibt es eine "Holzhacker" Methode die mir den Thread killt und ich nicht mit der Zeit den Speicher vollschreibe wenn ich die Threadprozeduren immer wieder mal neu starte?

Danke für eure Tipps.

_________________
Zitat Stromberg S03E08 - Erika:
"So...selbst die Capitolmatratze, die hier auf jedem Karosseplan umgerutscht ist, was will sie von mir? Zahlen. Aber so ist das. Als Chef in meiner Position, da bist du so einsam wie...Gott."
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 12.06.08 11:37 
Thread.Terminate setzt nur ein Flag, was den Thread darauf hinweist, fertigzuwerden.

Es gibt nun mehere Möglichkeitn:
- Im Thread-Fenster von Delphi den Thread markeiren, anhalten und im Stacktrace schauen, wo er steckt
- Die genaue Fehlerursache lokalisieren
- Den Thread mit KillThread beenden und anschließend das Thread-Objekt freigeben.

Die letzte Variante IST AUSDRÜCKLICH NICHT ZU EMPFEHLEN!!!

Alternativ kannst Du ja einen Watchdog-Thread eröffnen, der in regelmäßigen Abständen gestreichelt werden will. Wenn er dies nicht mehr wird, schlägt er Alarm ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Daimonion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Do 12.06.08 16:02 
Danke für die Antwort. Das Terminate nur ein Flag setzt hab ich schon vermutet.

Nachdem du mir abgeraten hast, den Thread zu killen hab ich mich nochmal ein wenig auf die Suche gemacht um vielleicht einen Übeltäter ausfindig machen zu können. Das Problem ist, dass das Gerät, welches auf durch den Thread angesprochen wird an einer seriellen Schnittstelle eines PanelPCs an einer Maschine hängt und ich so schlecht einen Langzeitversuch machen kann. Aber ich glaube den überltäter entdeckt zu haben und versuche den Fehler jetzt zu minimieren.

Danke für die Hilfe.

Grüße

_________________
Zitat Stromberg S03E08 - Erika:
"So...selbst die Capitolmatratze, die hier auf jedem Karosseplan umgerutscht ist, was will sie von mir? Zahlen. Aber so ist das. Als Chef in meiner Position, da bist du so einsam wie...Gott."