如何为Parallel.Async后台任务设置更高的任务优先级?

用户名

我需要为Parallel.Async后台任务分配更高的任务优先级由于OmniThreadLibrary具有SetPriority:如何为该Parallel.Async任务设置特定的优先级

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;
奥拉夫·赫斯(Olaf Hess)

代替

Parallel.TaskConfig.OnTerminated(...

以例如

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

优先级的可能值为

tpIdle, tpLowest, tpBelowNormal, tpNormal, tpAboveNormal, tpHighest

请注意,这只会影响赋予您进程中线程的优先级,而不会赋予进程本身更高的优先级。有关更多信息,请参见SetThreadPriority函数的文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章