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:
CreateTimerQueueTimer(hTimerQTimer, 0, @DoSomething, nil, 60000, 60000, 0);
DeleteTimerQueueTimer(hTimerQTimer, 0, 0);
Was soll die Funktion bewirken?
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:
constructor TMThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
Priority := tpLowest;
//Hier käme dann CreateTimerQueueTimer() hin?
end;
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?
Delphi-Quellcode:
procedure TMThread.Execute;
begin
FormCreate;
while not Terminated do
TimerTimer(self);
Timer.Free;
ClockTimer.Free;
end;