不知什么时候,也许是XE8,也许是XE8之前 .Delphi里面多了个System.Threading的并行库.
虽然己经有非常棒的第三方并行库QWorker,但我还是更喜欢官方的东西.
下面是一段使用System.Threading中ITask的代码
procedure TForm3.SpeedButton1Click(Sender: TObject); var tasks: array of ITask; value: Integer; LTask:ITask; X,Y:INTEGER; begin Setlength (tasks ,2); value := 0; x:=3000;y:=5000; tasks[0] := TTask.Create (procedure begin sleep (3000); Show(value,x); end); tasks[0].Start; tasks[1] := TTask.Create (procedure begin sleep (5000); Show(value,y); end); tasks[1].Start; TTask.WaitForAll(tasks); ShowMessage ('全部执行完毕,值是: ' + value.ToString); end;
这个东东里面己经使用了一个默认的线程池,并用全部用接口实现.内存自动管理,我感觉非常的棒
TTask还实现了两个类函数
class function TTask.WaitForAl(等待所有的线程执行完毕) 和 class function TTask.WaitForAny(其中一个线程执行完毕)
这是两个非常好用的实现,如此一来,你就可以知道你的作业是在什么时候己经执行完成了.