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.

最新文章

  1. Hibernate学习之hibernate.cfg.xml
  2. Effective java笔记(五),枚举和注解
  3. Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现
  4. c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗?
  5. HUST 1017 Exact cover (Dancing links)
  6. POJ 2127 Greatest Common Increasing Subsequence -- 动态规划
  7. hibernate笔记加强版
  8. myeclipse设置技巧
  9. Keil的可重定位段
  10. Oracle表解锁
  11. linux连接mysql 出现Access denied for user &#39;root&#39;@&#39;localhost&#39;(using password: YES)错误解决方案
  12. kube-proxy的功能
  13. java8_api_math
  14. 对数log
  15. 找工作的程序员必懂的Linux
  16. Filebeat的Registry文件解读
  17. MySQL模拟Oralce闪回操作
  18. mac 系统中vim安装ctags插件
  19. jDeveloper运行慢
  20. Android actionBar与Fragment结合使用Demo2

热门文章

  1. jQuery 核心函数
  2. vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用
  3. Object.assign的用法
  4. webpack-dev-server报错
  5. Jira7.10.1在Windows环境下的安装和配置
  6. Springboot添加定时任务
  7. Ubuntu中的出现:主文件夹的内容跑在桌面显示解决方案。同时 vim编辑器的操作
  8. UML作业第三次:分析《书店图书销售管理系统》,绘制类图
  9. iptables 添加raw提高服务器性能之路
  10. Netty 基本组件与线程模型