Man kann dem IdleWorker noch zwei Arrays verpassen:
Delphi-Quellcode:
FTasks : T??? // 0..n
EarliestStartArr : Array of Integer // 0..n (GetTickCount+gewünschtes Delay)
WaitAfterExecArr : Array of Integer // 0..n
Delphi-Quellcode:
procedure TIdleWorker.Execute( Action: TProc ; EarliestStart : Integer; WaitAfterExec : Integer);
begin
FTasks.Enqueue( Action );
Setlength(EarliestStartArr,Length(EarliestStartArr )+1);
EarliestStartArr[High(EarliestStartArr )] := EarliestStart;
Setlength(WaitAfterExecArr ,Length(WaitAfterExecArr)+1);
WaitAfterExecArr[High(WaitAfterExecArr)] := WaitAfterExec;
end;
Delphi-Quellcode:
procedure TIdleWorker.HandleIdleMessage( const Sender: TObject; const m: TMessage );
var
LTask: TProc;
begin
if FTasks.Count > 0 then
begin
LTask := FTasks.Dequeue( );
while GetTickCount<EarliestStartArr[??] do sleep(1);
LTask( );
sleep(WaitAfterExecArr[??])
// hier noch die Arrays anpassen: x[??] löschen und Längen dementsprechend anpassen
end;
end;
Nicht getestet, nur im Browser getippt.