Autor Beitrag
PattyPur
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 80

Win98, WinXP
Delphi 7
BeitragVerfasst: Mi 11.09.02 21:42 
Ich hab da mal was ausprobiert :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 12.09.02 10:28 
procedure WMEndSession(var Msg:TWMEndSession); message WM_ENDSESSION;

du musst auf diese message reagieren
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 80

Win98, WinXP
Delphi 7
BeitragVerfasst: Fr 13.09.02 23:03 
danke habe gerade bei DelphiPraxis die vorschläge gelesen und werd es auch gleich mal ausprobieren
thePraYeR
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 27



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 80

Win98, WinXP
Delphi 7
BeitragVerfasst: 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 14.09.02 22:04 
nonVCL lautet das Stichwort.