Einzelnen Beitrag anzeigen

Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Ansatz für Task-Queue Sequenz

  Alt 17. Jun 2015, 11:47
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.
Chris

Geändert von Photoner (17. Jun 2015 um 11:50 Uhr)
  Mit Zitat antworten Zitat