Entwickler-Ecke
Sonstiges (Delphi) - Wie beende ich meinen Thread ?
PattyPur - Mi 11.09.02 21:42
Titel: Wie beende ich meinen Thread ?
Ich hab da mal was ausprobiert :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| program threadApp;
uses classes;
type TCheckThread = class(TThread) protected procedure Execute; override; end;
{$R *.res}
var CheckThread : Tcheckthread; Procedure TCheckThread.execute; var found:boolean; i:integer; begin while not terminated do begin //.... hier passiert halt was ! end; end;
begin Checkthread:=Tcheckthread.Create(false); Checkthread.Execute; end. |
Das programm läuft wenn es gestartet wurde einfach weiter und weiter und weiter... - Soll es auch nur wenn windows runtergefahren wird kann dieses Programm nicht von Windows beendet werden und ich kann nur mit Task->beenden mein programm schliessen.
Wie reagiere ich da richtig auf Die anweisung von Windows ?
also ich weiss das ich irgendwie eine art onClose - Event benötige in dem ich auch sage
Checkthread.terminate;
zuerst hatte ich mein Programm in verbindung mit einer TForm (standard Anwendung halt) und hab das onClose event der Form benutzt um meinen thread zu terminieren - nur da ich die Form für sonst nix brauche will ich auch ohne sie auskommen.
CenBells - Do 12.09.02 10:28
procedure WMEndSession(var Msg:TWMEndSession); message WM_ENDSESSION;
du musst auf diese message reagieren
Delete - Do 12.09.02 23:51
Ohne Messageloop schlecht möglich. :wink:
Aber eine Lösung hat er bereits in einem anderen Forum bekommen. Nur hat er bisher noch nicht reagiert - oder hab eich was vergessen?
PattyPur - Fr 13.09.02 23:03
danke habe gerade bei DelphiPraxis die vorschläge gelesen und werd es auch gleich mal ausprobieren
thePraYeR - Sa 14.09.02 19:28
:lol: :lol: :lol:
Mensch....
Also:
Erste Frage: Sicher, daß das der Original-Source ist? Weil, Du rufst eine protected-Methode von außerhalb auf und das ist...naja...sagen wir mal *ungewöhnlich*.
Zweite Frage: Wenn Du einen Thread erzeugst und dieser nicht "suspended" erzeugt wird, wird die Methode Execute automatisch ausgeführt. Bist Du sicher, daß Du Execute nochmals in der Hauptanwendung starten willst?
Mögliche Lösung (nicht ausprobiert):
Unit Forms einbinden. Im Projektfile Deinen Thread erzeugen. Application.Initialize aufrufen. Application.Run aufrufen. Nach Application. Run Thread beenden (mit Thread.Terminate). Allerdings weiß ich nicht, was Du damit willst.
PattyPur - Sa 14.09.02 21:59
wenn ich execute nicht aufrufe wird es (warum auch immer ) nicht ausgeführt aber ich lass es doch so wie es vorher war in einer normalen Form ich dacht halt nur ich könnte die fertige exe was kleiner halten denn mit der unit forms ist die exe gleich 230 KB größer
Delete - Sa 14.09.02 22:04
nonVCL lautet das Stichwort.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!