Zitat von
Apollonius:
Das sieht doch mal sauber aus. Ich habe mich mal dran versucht, allerdings wird OnTimer irgendwie nicht aufgerufen, stattdessen stürzt das Programm mit einem APPCRASH ab (keine Rückmeldung)
Delphi-Quellcode:
unit Scheduler;
interface
uses Windows;
type
TSchedule = reference
to procedure;
TScheduler =
class
private
FQueue: THandle;
public
constructor Create;
destructor Destroy;
override;
procedure AddSchedule(Milliseconds: Cardinal; Proc: TSchedule);
end;
implementation
{ TScheduler }
constructor TScheduler.Create;
begin
FQueue := CreateTimerQueue;
end;
destructor TScheduler.Destroy;
begin
DeleteTimerQueue(FQueue);
inherited;
end;
procedure OnTimer(Context: Pointer; Success: Boolean);
stdcall;
var
Proc: TSchedule;
begin
Proc := TSchedule(Context);
Proc;
end;
procedure TScheduler.AddSchedule(Milliseconds: Cardinal; Proc: TSchedule);
var
Timer: THandle;
begin
CreateTimerQueueTimer(Timer, FQueue, OnTimer, @Proc, Milliseconds, 0, WT_EXECUTEONLYONCE);
end;
end.
Aufruf:
Delphi-Quellcode:
var
S: TScheduler;
begin
S := TScheduler.Create;
S.AddSchedule(5000, procedure begin ShowMessage('test') end);
end;
Weiß jemand was falsch ist?
Edit: Es liegt am reference to proceudre, mache ich das ShowMessage direkt in OnTimer geht es.