2016-12-31 6 views
1

Ich muss einer Parallel.Async Hintergrundaufgabe eine höhere Aufgabenpriorität zuweisen. Da die OmniThreadLibrary SetPriority hat: Wie kann ich eine bestimmte Priorität auf diese Parallel.Async Aufgabe festlegen? ErsetzenWie legen Sie eine Parallels.Async-Hintergrundaufgabe eine höhere Aufgabenpriorität fest?

uses 
    CodeSiteLogging, 
    OtlParallel, OtlTaskControl, OtlTask; 

procedure TForm2.btnParallelAsyncClick(Sender: TObject); 
begin 
    CodeSite.Send('btnParallelAsyncClick 1'); 

    Parallel.Async(
    procedure(const task: IOmniTask) 
    var 
     a: Integer; 
    begin 
     // executed in background thread: 
     a := 1 + 1; 
     Sleep(2000); 
     CodeSite.Send('Executed in Async Thread', a); 

     task.Invoke(// used to execute code in main thread 
     procedure 
     begin 
      CodeSite.Send('task.Invoke executed in main thread', a); 
     end); 

     Sleep(2000); 
     CodeSite.Send('Again executed in Async Thread', a); 
    end, 
    Parallel.TaskConfig.OnTerminated(
    procedure(const task: IOmniTaskControl) 
    begin 
     // executed in main thread: 
     CodeSite.Send('After background thread termination: Executed in Main Thread'); 
    end 
    ) 
    ); 

    CodeSite.Send('btnParallelAsyncClick 2'); 
end; 

Antwort

1

Parallel.TaskConfig.OnTerminated(... 

mit zum Beispiel

Parallel.TaskConfig.SetPriority(tpAboveNormal).OnTerminated(... 

Mögliche Werte für die Priorität sind

tpIdle, tpLowest, tpBelowNormal, tpNormal, tpAboveNormal, tpHighest 

Bitte beachten Sie, dass dies nur die Priorität auf die gegebene beeinflusst Threads innerhalb Ihr Prozess und gibt dem Prozess selbst keine höhere Priorität. Weitere Informationen finden Sie in der Dokumentation zur SetThreadPriority-Funktion.

+0

Vielen Dank, Olaf. Bei Verwendung von 'tpHighest' muss jedoch der richtige Namespace angegeben werden:' Parallel.TaskConfig.SetPriority (TOTLThreadPriority.tpHighest) .OnTerminated (... '. Das liegt daran, dass die Klasse' TThreadPriority' kommt: 'E2010 Inkompatible Typen: ' TOTLThreadPriority 'und' TThreadPriority''. – user1580348

+0

Bedeutet dies, dass der Code in der 'Parallel.Async' Sektion schneller mit' tpHighest' als mit 'tpNormal' ausgeführt wird? – user1580348

+0

Wenn ich die Dokumentation richtig verstehe, ist der Code in' Parallel .Async "Abschnitt wird mehr CPU-Zeit als die anderen Threads in diesem Prozess. Wenn die anderen Threads nichts tun, bin ich nicht sicher, ob es einen spürbaren Effekt. Um die Priorität eines gesamten Prozesses entweder über einen API-Aufruf zu ändern ([So legen Sie die Prozesspriorität in C++ fest] (http://stackoverflow.com/questions/5216347/how-to-set-the-process-priority-in-c)) oder verwenden Sie das Menü "Priorität ändern" in Windows Task-Manager oder starten Sie das Programm mit dem "Start" -Befehl li ne Befehl und übergeben Sie die Priorität als Parameter. –

Verwandte Themen