Einzelnen Beitrag anzeigen

Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

Re: ServiceThread.ProcessRequests(False) = 100% CPU ???

  Alt 9. Mai 2008, 14:41
Ich empfehle, einen CreateWaitableTimer zu verwenden. Da kann man auch eine absolute Zeit angeben.
Zudem noch MsgWaitForMultipleObjects für diesen Timer, für ein ShutdownEvent (CreateEvent)
und schon funktioniert es auch ohne diese komische Zeitumrechnung.

Hier ein unvollständiges Beispiel, wie JWSCL einen Dienst implementiert.
Delphi-Quellcode:


ConnectNamedPipe(Pipe, @OvLapped);

{JwCreateWaitableTimer unterstüzt nur relative Zeit.
Das original API kann auch absolute Zeiten unterstützen.
Hey-  jeder ist willkommen eine erweiterte leicht verwendbare
Version beizusteuern.
}

fTimer := JwCreateWaitableTimer(5000 {5sek});

repeat
  if Assigned(ServiceThread) then
    ServiceThread.ProcessRequests(False);

  SetLastError(0);
  WaitResult := JwMsgWaitForMultipleObjects([fServiceStopEvent, OvLapped.hEvent, fTimer], false, INFINITE, QS_ALLINPUT);

  if WaitResult = WAIT_OBJECT_0 +1 then
    ResetEvent(OvLapped.hEvent);

  if WaitResult = WAIT_OBJECT_0 + 2 then
   PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE);//tag message as read

  if (WaitResult = WAIT_OBJECT_0 + 2 then
    TimerEvent!
until WaitResult <> WAIT_OBJECT_0 + 3;


if WaitResult = WAIT_OBJECT_0 +1 then //OvLapped.hEvent
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat