delphi Parallel 之 TTask 初试
2024-10-14 09:42:47
unit Unit1; interface uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
System.Generics.Collections; type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
procedure TaskProc(Sender: TObject);
function FutureEvent(Sender: TObject): string;
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} uses
System.Threading, System.SyncObjs, System.Diagnostics; procedure TForm1.Button1Click(Sender: TObject);
var
ATask: ITask;
begin
ATask := TTask.Run(Self, Form1.TaskProc);
ATask.Start;
//阻塞至线程结束
ATask.Wait;
end; procedure TForm1.Button2Click(Sender: TObject);
var
ATask: IFuture<string>;
begin
ATask := TTask.Future<string>(function: string
begin
TThread.Sleep();
Result := DateTimeToStr(Now);
end);
//阻塞至线程结束
Caption := ATask.Value;
end; procedure TForm1.Button3Click(Sender: TObject);
var
ATask: IFuture<string>;
begin
ATask := TTask.Future<string>(Self, FutureEvent);
//阻塞至线程结束
Caption := ATask.Value;
end; procedure TForm1.Button4Click(Sender: TObject);
var
TaskArray: TArray<ITask>;
I: Integer;
begin
SetLength(TaskArray, );
for I := Low(TaskArray) to High(TaskArray) do
TaskArray[I] := TTask.Run(procedure
begin
TThread.Sleep();
end);
//阻塞至线程结束
TTask.WaitForAll(TaskArray);
ShowMessage('ok');
end; procedure TForm1.FormCreate(Sender: TObject);
begin
ReportMemoryLeaksOnShutdown := True;
end; function TForm1.FutureEvent(Sender: TObject): string;
begin
Result := DateTimeToStr(Now);
end; procedure TForm1.TaskProc(Sender: TObject);
var
I: Integer;
begin
TThread.Sleep();
for I := to do
TThread.Queue(nil, procedure
begin
Memo1.Lines.Add(Sender.ClassName);
end);
end; end.
最新文章
- Hibernate学习之hibernate.cfg.xml
- Effective java笔记(五),枚举和注解
- Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现
- c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗?
- HUST 1017 Exact cover (Dancing links)
- POJ 2127 Greatest Common Increasing Subsequence -- 动态规划
- hibernate笔记加强版
- myeclipse设置技巧
- Keil的可重定位段
- Oracle表解锁
- linux连接mysql 出现Access denied for user &#39;root&#39;@&#39;localhost&#39;(using password: YES)错误解决方案
- kube-proxy的功能
- java8_api_math
- 对数log
- 找工作的程序员必懂的Linux
- Filebeat的Registry文件解读
- MySQL模拟Oralce闪回操作
- mac 系统中vim安装ctags插件
- jDeveloper运行慢
- Android actionBar与Fragment结合使用Demo2
热门文章
- jQuery 核心函数
- vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用
- Object.assign的用法
- webpack-dev-server报错
- Jira7.10.1在Windows环境下的安装和配置
- Springboot添加定时任务
- Ubuntu中的出现:主文件夹的内容跑在桌面显示解决方案。同时 vim编辑器的操作
- UML作业第三次:分析《书店图书销售管理系统》,绘制类图
- iptables 添加raw提高服务器性能之路
- Netty 基本组件与线程模型