不知什麼時候,也許是XE8,也許是XE8之前 .Delphi裡面多了個System.Threading的並行庫. 雖然己經有非常棒的第三方並行庫QWorker,但我還是更喜歡官方的東西. 下麵是一段使用System.Threading中ITask的代碼 這個東東裡面己經使用了一個預設的線程池,並用全 ...
不知什麼時候,也許是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(其中一個線程執行完畢)
這是兩個非常好用的實現,如此一來,你就可以知道你的作業是在什麼時候己經執行完成了.