![]() |
Timer klappt nicht in Dienst
N'Abend,
ich starte aus einem Thread heraus einen Timer. Der funktioniert auch, wenn ich diesen Thread aus einer normalen Anwendung heraus aufrufe. Sobald ich das ganze aber mit einem Dienst versuche, passiert nix mehr. Irgendwelche Ideen? Danke schonmal. |
Re: Timer klappt nicht in Dienst
Hi,
sry aber ich versteh nicht ganz, wie du das mit "dem Dienst" meinst ? :gruebel: |
Re: Timer klappt nicht in Dienst
Ich denke mal er will es als Systemdienst laufen lassen.
@dingdoi: schau Dir mal die Tutorials von Luckie an |
Re: Timer klappt nicht in Dienst
Hallo dingdoi,
ich will hoffen Du aktivierst den Timer erst, wenn der Dienst gestartet ist. Sonst rennt er los und die Initialisierungen sind noch garnicht abgeschlossen. bye Claus |
Re: Timer klappt nicht in Dienst
Der Dienst an sich läuft ohne Probleme. Der macht, was er soll.
Der Dienst startet einen Thread, aus dem wiederum der Timer gestartet wird. Das sollte soweit seine Richtigkeit haben. Alle anderen Funktionen werden richtig gestartet und ausgeführt. Nur eben der Timer nicht. |
Re: Timer klappt nicht in Dienst
Ein Timer braucht eine MessageLoop und die hat ein Dienst in der Regel nicht. Willst du etwas periodisch machen, dann nimm eine Thread den du mit Sellep() entsprechen lange die Rechenzeit enziehst oder wenn es erst ab Windows 2000 laufen muss dann nimm
![]() |
Re: Timer klappt nicht in Dienst
@Luckie: Klasse, mit CREATETIMERQUEUETIMER funktioniert es. Danke! :-D
|
Re: Timer klappt nicht in Dienst
Zeig mal wie du das mit CREATETIMERQUEUETIMER gemacht hast, das würde mich brennend interessieren
|
Re: Timer klappt nicht in Dienst
Ich hoffe, dieses kleine Beispiel hilft dir weiter. :idea:
Code:
...
TYPE TXyzThread = class(TThread) private hTimerQTimer: THandle; // <<<<< public constructor Create; destructor Destroy; end; procedure DoSomething(Context: Pointer; TimeOut: Boolean); stdcall; // <<<<< implementation constructor TXyzThread.Create; begin CreateTimerQueueTimer(hTimerQTimer, 0, @DoSomething, nil, 60000, 60000, 0); // <<<<< end; destructor TXyzThread.Destroy; begin DeleteTimerQueueTimer(hTimerQTimer, 0, 0); // <<<<< end; ... |
Re: Timer klappt nicht in Dienst
Ja vielen Dank für das Beispiel, aber ich hätte noch ein paar Fragen zu den drei Funktionen
Bei Create und Delete, welche PArameter werden da übergeben, das erste ist jeweils das Handle, aber der Rest? Das Handle steht für das Programm, für das der Timer ist?
Delphi-Quellcode:
Was soll die Funktion bewirken?
CreateTimerQueueTimer(hTimerQTimer, 0, @DoSomething, nil, 60000, 60000, 0);
DeleteTimerQueueTimer(hTimerQTimer, 0, 0);
Delphi-Quellcode:
procedure DoSomething(Context: Pointer; TimeOut: Boolean); stdcall;
Jetzt zur Anwendung des ganzen: ich habe einen Dienst und mit der folgenden Funktion starte ich den Dienst
Delphi-Quellcode:
procedure TTMService.ServiceStart(Sender: TService; var Started: Boolean);
begin //hier Aufruf des Threads TMThread:= TMThread.Create(false); end; Dann habe ich meinen Thread:
Delphi-Quellcode:
Dann gibt es dort die Methode Execute: Hier soll zuerst die Methode FormCreate durchgeführt werden, und danach so die Methode TimerTimer aufgerufen werden, dort wird der Timer dann jeweils enabled = true oder false, je nach Arbeitsschritt. Der Timer ist zu Anfang der Methode erst mal enabled:= false; Wie muss ich das ganze jetzt ändern? Und bleibt der Aufruf der Methode Execute so oder muss ich daran etwas ändern? Kann ich dann schreiben if not Terminated then und dann die Funktion, die Timergesteuert ist? Und dann sollte er die Funktion immer in vorgegebenen Abständen aufrufen?
constructor TMThread.Create(CreateSuspended: Boolean);
begin inherited Create(CreateSuspended); Priority := tpLowest; //Hier käme dann CreateTimerQueueTimer() hin? end;
Delphi-Quellcode:
procedure TMThread.Execute;
begin FormCreate; while not Terminated do TimerTimer(self); Timer.Free; ClockTimer.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz