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;
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
Bedeutet dies, dass der Code in der 'Parallel.Async' Sektion schneller mit' tpHighest' als mit 'tpNormal' ausgeführt wird? – user1580348
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. –