Einzelnen Beitrag anzeigen

WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#16

Re: ScheduledFuture in Delphi?

  Alt 17. Okt 2009, 21:35
Zitat von Apollonius:
Es gibt keinen Grund, einen Zeiger auf das Timer-Handle in TDescriptor zu speichern. Nimm das Handle selbst.
Der letzte Parameter von DeleteTimerQueueTimer sollte wahrscheinlich 0 sein, INVALID_HANDLE_VALUE blockiert. Auf der anderen Seite weiß ich nicht, ob man aus dem Callback überhaupt seinen eigenen Timer löschen kann.
Das hab ich mir auch schon gedacht, ich weiß nur nicht wann ich es sonst machen soll

Delphi-Quellcode:
procedure OnTimer(Context: Pointer; Success: Boolean); stdcall;
begin
  PDescriptor(Context)^.Proc;

  try
    if not DeleteTimerQueueTimer(PDescriptor(Context)^.Queue, PDescriptor(Context)^.Timer, 0) then
      raise Exception.Create('Deleting a timer failed!');
  finally
    Dispose(Context);
  end;
end;

procedure TScheduler.AddSchedule(Milliseconds: Cardinal; Proc: TSchedule);
var
  Timer: THandle;
  PDesc: PDescriptor;
begin
  New(PDesc);
  PDesc^.Proc := Proc;
  PDesc^.Queue := FQueue;

  if not CreateTimerQueueTimer(Timer, FQueue, OnTimer, PDesc, Milliseconds, 0, WT_EXECUTEONLYONCE) then
    raise Exception.Create('Creating a timer failed!');

  PDesc^.Timer := Timer;
end;
"Deleting a timer failed!" tritt auf.
  Mit Zitat antworten Zitat