Delphi D10.X 并行库PPL编程系列之 TTask

delphi中的RTL(运行库)提供了并行编程库(PPL --Parallel Programming Library) ,让您的应用程序可以在跨平台应用中有效的使用多个CPU并行运行任务的能力。

使用TTask和ITask 并行运行多个任务

TASK说明

TTask的实例是一个可以在并行于其他正在运行的任务的线程中完成单个任务或工作内容。

TTask类创建和管理由ITask接口生成的任务实例,可以是TTask的实例,其继承类或与ITask接口兼容的其他类型。

与任务相关联的过程可以与其他相似任务或当前正在运行的其他线程相关联的过程并行运行。哪些任务将并行运行以及何时运行,由目标平台运行时环境可用的线程资源来确定。

可以使用Create构造函数创建适合并行执行的任务。使用构造函数创建后的任务过程在调用Start方法之后被视为可以执行。

ITask的WaitForAll,WaitForAny和Wait方法用于显式中止调用线程的执行,以等待任何或所有正在运行的任务。

要取消执行任何任务,请调用ITask相关实例的Cancel方法。

可以直接使用Run方法创建和管理任务过程以执行,类似于调用Create并随后立即调用Start。

对于在程序中的某个较晚一点需要返回值的任务,可以使用通用函数Future来启动任务,以确定与其他任务并行的所需值; 然后在之后需要时通过调用GetValue方法来获取计算值。

并行执行的任务可能需要使用全局的可用资源、变量等,请使用System.SyncObjs单元的同步工具来避免可能的争用问题。

使用演示

接下来演示应用程序如何使用并行编程库(PPL)实现任务 。有一个主线程管理任务队列,并从线程池中分配线程来完成任务。该线程池具有多少线程数,取决于设备可用CPU数量。

演示中使用到的控件


具体可下载DEMO查看。

实现两种执行过程

首先,我们需要引用PPL库:

usesSystem.Threading; // 需要引用PPL库

定义两个执行过程:

    procedure NoTask; // 不使用任务的情况procedure ApplyTask; // 使用任务的情况

分别编写两个执行过程,这两个执行过程都将演示一个长时间计算的过程,该过程从您按下按钮开始。它休眠3秒钟(模拟需要计算的处理时间),然后显示0到10之间的一个随机数。

procedure TForm5.ApplyTask;
varlValue: Integer;
beginLabel1.Text := '使用Task:--';TTask.Run(procedurebegin{ 暂停一段时间,模拟需要计算的处理时间 }Sleep(3000);lValue := Random(10);TThread.Synchronize(nil,procedurebeginLabel1.Text := '使用Task:' + lValue.ToString;end);end);
end;procedure TForm5.NoTask;
varlValue: Integer;
beginLabel1.Text := '未用Task--';{ 暂停一段时间,模拟需要计算的处理时间 }Sleep(3000);lValue := Random(10);Label1.Text := '未用Task:' + lValue.ToString;
end;

创建按钮事件,当CheckBox1选中时执行任务,未选择时使用常用方式执行。

procedure TForm5.Button1Click(Sender: TObject);
beginif CheckBox1.IsChecked thenApplyTaskelseNoTask;
end;

演示效果

运行程序,将看到进度条自动增减的显示效果。
首先我们不选中CheckBox1,按下启动按钮并开始进行长时间计算,界面上进度条停止运动,直到计算完成进度条才能恢复运动显示。

其次,我们再选中CheckBox1,按下启动按钮并开始,界面上进度条保持原运动状态,3秒后得到计算结果,计算的执行过程中没有影响到界面任务的执行。

具体使用请参阅

使用并行编程库
并行库PPL编程之 TParallel.For
并行库PPL编程之 Futures

演示Demo

可下载本系列文章对应的演示程序,含代码。使用D10.3.2编辑。
Delphi D10.X 使用并行编程库使用演示


欢迎光顾本人小店:(https://shop63778938.taobao.com/)
小店也提供delphi方面其他技术支持、定制开发。

现在就进店看看

以上信息对您有用的话请点赞收藏,就下面这行

Delphi D10.X 并行库PPL编程之TTask相关推荐

  1. Delphi D10.X 并行库PPL编程之 TParallel.For

    Delphi D10.X 并行库PPL编程系列之 TParallel.For delphi中的RTL(运行库)提供了并行编程库(PPL --Parallel Programming Library) ...

  2. unity连接linux服务器,C#编程之C#通过SharpSSH库与Linux服务器建立SSH连接并执行命令...

    本文主要向大家介绍了C#编程之C#通过SharpSSH库与Linux服务器建立SSH连接并执行命令,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. 在Unity3D项目开发工具时需要用到S ...

  3. Delphi XE7中新并行库

    Delphi XE7中添加了新的并行库,和.NET的Task和Parellel相似度99%. 详细内容能够看以下的文章: http://www.delphifeeds.com/go/s/119574 ...

  4. 看完知乎轮子哥的编程之路,我只想说,收下我的膝盖...

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 作者:vczh 来源:https://dwz.cn/sWwZoQEl vczh,本名陈 ...

  5. 【专业造轮子】 一位大神的编程之路,让我大吃一惊

    vczh,本名陈梓瀚,因知乎的个人信息介绍上写有 "专业造轮子",所以江湖人称 "轮子哥". vczh 大学时代就在微软实习,毕业后即加入微软.开始时是在微软上 ...

  6. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  7. linux C编程之makefile

    linux C编程之makefile 目的:       基本掌握了 make 的用法,能在Linux系统上编程. 环境:       Linux系统,或者有一台Linux服务器,通过终端连接.一句话 ...

  8. linux编程之pthread_create函数

    linux编程之pthread_create函数UNIX环境创建线程函数, 具体格式: #include<pthread.h> int pthread_create(pthread_t * ...

  9. Ruby与Google 2009编程之夏

    Google 编程之夏正在接收项目提案.今年Ruby On Rails也是赞助组织之一,为学生提供辅导. \u0026#xD;\n 也许大家还能记得,去年在Ruby Central的主导下,Googl ...

最新文章

  1. 【c++】iostreeam中的类为何不可以直接定义一个无参对象呢
  2. db2 order by 利用索引
  3. AC-Tek Sidewinder v7.2.2 输送机设计+IDEA StatiCa v9.1.31.50722 钢结构混凝土结构件设计...
  4. Android之View和SurfaceView
  5. ffmpeg使用总结
  6. javascript中json格式转为字符串
  7. Java实现生产消费模型的5种方式
  8. c++中的set容器和multiset容器
  9. 发际线不符合有经验形象,程序员面试遭拒绝,网友:只招秃子?
  10. Numpy np.random.RandomState()的简单用法
  11. 深度学习-图解卷积运算
  12. isupper函数用法
  13. 【python+selenium】保留浏览器的自定义设置,不恢复浏览器默认设置
  14. 用Python制作一条五彩蟒蛇
  15. 作业4 | Lloyd-Max标量量化器DCMP基本原理
  16. 解决并隐藏h5页面在新版微信iOS 端出现底部白色导航条
  17. 小编教你如何打印出一张好看的思维导图
  18. java 自行车_JAVA 2020款山地车盘点
  19. JVM中的cms是什么???
  20. Java 面试 宝典 (2)

热门文章

  1. 基于springboot教师人事档案管理系统
  2. 2017年全国大学生电子设计大赛有感
  3. 医学图像处理——图像边缘检测(一)——掩模的概念、点检测、线检测
  4. IE11,Chrome65.0.3325.146,Firefox58的webdriver驱动下载,并用selenium驱动来实现自动化测试
  5. 所有类型的Redis安装部署
  6. 作为一个计算机学生该怎样度过大学生活
  7. 前程无忧岗位数据可视化分析报告
  8. MATLAB中split函数使用
  9. php中dede,dedecms中的{dede:php}{/dede:php}的详细用法
  10. Intel HAXM is required to run this AVD. Virtual machine acceleration driver is out-of-date