Delphi XE10 RTL - PPL - TTask
Delphi XE10 RTL - PPL - TTask
并行编程库(PPL --Parallel Programming Library) ,让您的应用程序可以在跨平台应用中有效的使用多个CPU并行运行任务的能力。
TTask(并行运行多个任务) 说明:
- TTask的实例是一个可以在并行于其他正在运行的任务的线程中完成单个任务或工作内容。
- TTask类创建和管理由ITask接口生成的任务实例,可以是TTask的实例,其继承类或与ITask接口兼容的其他类型。
- 与任务相关联的过程可以与其他相似任务或当前正在运行的其他线程相关联的过程并行运行。哪些任务将并行运行以及何时运行,由目标平台运行时环境可用的线程资源来确定。
- 可以使用Create构造函数创建适合并行执行的任务。使用构造函数创建后的任务过程在调用Start方法之后被视为可以执行。
- ITask的WaitForAll,WaitForAny和Wait方法用于显式中止调用线程的执行,以等待任何或所有正在运行的任务。
- 要取消执行任何任务,请调用ITask相关实例的 Cancel方法。
- 可以直接使用Run方法创建和管理任务过程以执行,类似于调用Create并随后立即调用Start。
- 对于在程序中的某个较晚一点需要返回值的任务,可以使用通用函数Future来启动任务,以确定与其他任务并行的所需值; 然后在之后需要时通过调用GetValue方法来获取计算值。
- 并行执行的任务可能需要使用全局的可用资源、变量等,请使用System.SyncObjs单元的同步工具来避免可能的争用问题。
Delphi 示例:
// 主线程管理任务队列,并从线程池中分配线程来完成任务。该线程池具有多少线程数,取决于设备可用CPU数量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | uses System . Threading; // 需要引用PPL库 //定义两个执行过程: procedure NoTask; // 不使用任务的情况 procedure ApplyTask; // 使用任务的情况 procedure TForm1 . ApplyTask; var lValue: Integer ; begin Label1 . Text := '使用Task:--' ; TTask . Run( procedure begin Sleep( 2000 ); { 暂停一段时间,模拟需要计算的处理时间 } lValue := Random( 100 ); TThread . Synchronize( nil , procedure begin Label1 . Text := '使用Task:' + lValue . ToString; end ); end ); end ; procedure TForm1 . NoTask; var lValue: Integer ; begin Label1 . Text := '未用Task--' ; { 暂停一段时间,模拟需要计算的处理时间 } Sleep( 3000 ); lValue := Random( 100 ); Label1 . Text := '未用Task:' + lValue . ToString; end ; //创建按钮事件,当CheckBox1选中时执行任务,未选择时使用常用方式执行。 procedure TForm1 . Button1Click(Sender: TObject); begin if CheckBox1 . IsChecked then ApplyTask else NoTask; end ; |
创建时间:2020.06.23 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报