Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Therad und Timer??? (https://www.delphipraxis.net/27635-therad-und-timer.html)

romber 13. Aug 2004 11:11


Therad und Timer???
 
Hallo!

Sind Threads und Timer nicht kompatibel oder wie? Ich erstelle im Thread einen Timer und der führt die OnTimer-Procedure überhaupt nicht aus! :wall:

z. B.:

Code:
...
type
 TMyThread = class(TThread)
 private
  {private declarations}
  timer: TTimer;
  FStartTime: TDateTime;
  procedure TimerOnTimer(Sender: TObject);
 protected
   procedure Execute; override;

end;
...

procedure TMyThread.TimerOnTimer(Sender: TObject);
begin
Form1.Edit1.Text := FormatDateTime('NN:SS', Now - FStartTime);
end;

procedure TMyThread.Execute;
begin
FStartTime := Now;
timer := TTimer.Create(nil);
timer.OnTimer := TimerOnTimer;
timer.Interval := 100;

...

while not terminated do
begin
  //Hier macht der Thread sein Hauptjob
end;
...
timer.Free;
end;
Mache ich etwas falsch?

Vjay 13. Aug 2004 12:01

Re: Therad und Timer???
 
Du musst in deinem Execute auch eine Messageloop einbauen sonst beendet der Thread doch sofort. Oder haste das jetzt ausge . tet ?

romber 13. Aug 2004 12:10

Re: Therad und Timer???
 
Ja, ich habe die Kode oben ein wenig geändert. Läuft trotzdem nicht ;(

oki 13. Aug 2004 12:14

Re: Therad und Timer???
 
Hi,

Antwort von Vjay schon mal richtig!

Frage: Warum ein Timer im Thread?

Der Timer verhält sich doch selber wie ein Thread. Was soll der da?

Aber zu deiner Frage. Ergänze deinen Code um folgendes:

in private:

FTimerTimer : Boolean;

im Ereignis TimeronTimer:

FTimerTimer := True;

in Execute:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
  FStartTime := Now;
  ...
  timer := TTimer.Create(nil);
  timer.OnTimer := TimerOnTimer;
  timer.Interval := 100;
  while not terminated or FTimerTimer do
    begin
    ...
    ...
  end;
end;
Dann arbeitet dein execute solange, bis der Thread terminiert wird oder dein OnTimer-Ereignis eintritt.

Prüfe bitte auch, ob dein Thread gestartet ist.

Gruß oki

romber 13. Aug 2004 12:28

Re: Therad und Timer???
 
Danke erstmal! Ich versuche jetzt! ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 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