Ich habe nun mal ein bisschen mit diesen Waitable-Timer-Objects rumgespielt. Leider verstehe ich das mit dem
APC-Callback nicht. Dieser wird bei mir nicht ausgelöst:
Delphi-Quellcode:
procedure Trigger(lpArgToCompletionRoutine: Pointer; dwTimerLowValue, dwTimerHighValue: DWORD);
begin
ShowMessage('Callback...');
end;
procedure TForm1.Button1Click(Sender: TObject);
var Wecker: SYSTEMTIME;
CorrectTriggerTime, TriggerTime: FILETIME;
DueTime: LARGE_INTEGER;
begin
GetLocalTime(Wecker);
Wecker.wMinute := Wecker.wMinute +1;
SystemTimeToFileTime(Wecker, TriggerTime);
LocalFileTimeToFileTime(TriggerTime, CorrectTriggerTime);
DueTime.LowPart := CorrectTriggerTime.dwLowDateTime;
DueTime.HighPart := CorrectTriggerTime.dwHighDateTime;
SetWaitableTimer(WndTimer, DueTime.QuadPart, 0, @Trigger, nil, True);
WaitForSingleObjectEx(WndTimer, INFINITE, True);
Showmessage('Schluss');
end;
Bei dem Test wird wie gewünscht eine Minute gewartet, der der Callback wird aber nicht aufgerufen. Das mit den APCs durchschaue ich im Moment leider nicht. Ich würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte!