首页 > 其他 > 详细

Omnithreadlibary学习(1)-异步执行

时间:2014-08-13 18:09:46      阅读:347      评论:0      收藏:0      [点我收藏+]
program main;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  OtlParallel;
begin
  Parallel.Async(procedure
  var
    i: Integer;
  begin
  for I := 0 to 100 do
     Writeln(Format(‘No.%d‘, [i]));
  end);
  Writeln(‘执行一‘);
  Sleep(100);
  Writeln(‘执行二‘);
  Sleep(100);
  Writeln(‘执行三‘);
  Sleep(100);
  Readln;
end.

 输出结果:

 bubuko.com,布布扣

 程序非常简单

 引用OtlParallel.pas单元 创建一个匿名函数控制台输出1..10 

 跟进源码看到下面两个函数

procedure Parallel.Async(task: TProc; taskConfig: IOmniTaskConfig);

TOmniTaskDelegate = reference to procedure(const task: IOmniTask);//TOmniTaskDelegate 任务委托声明
procedure Parallel.Async(task: TOmniTaskDelegate; taskConfig: IOmniTaskConfig);

第一个函数Async 接受一个TProc的匿名函数, taskConfig默认为nil (IOmniTaskConfig应该是设置任务的一些属性后面在研究)

实际内部调用用了Parallel.Async(task: TOmniTaskDelegate; taskConfig: IOmniTaskConfig) 

方便使用

class procedure Parallel.Async(task: TProc; taskConfig: IOmniTaskConfig);
begin
  Async(
    procedure (const omniTask: IOmniTask)
    begin
      task;
    end,
    taskConfig
  );
end; { Parallel.Async }

class procedure Parallel.Async(task: TOmniTaskDelegate; taskConfig: IOmniTaskConfig);
var
  omniTask  : IOmniTaskControl;
  terminated: TOmniTaskConfigTerminated;
begin
  if assigned(taskConfig) then
    (taskConfig as IOmniTaskConfigInternal).DetachTerminated(terminated);
  omniTask := CreateTask(task, Parallel.Async).Unobserved.OnTerminated(
    procedure (const task: IOmniTaskControl)
    var
      exc: Exception;
    begin
      terminated.Call(task);
      exc := task.DetachException;
      if assigned(exc) then
        raise exc;
    end
  );
  Parallel.ApplyConfig(taskConfig, omniTask);
  omniTask.Unobserved;
  omniTask.Schedule(GetPool(taskConfig));
end; { Parallel.Async }

 

Omnithreadlibary学习(1)-异步执行,布布扣,bubuko.com

Omnithreadlibary学习(1)-异步执行

原文:http://www.cnblogs.com/pengshaomin/p/3910279.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!