//准备让线程调用的测试函数 procedure Draw(aCanvas: TCanvas; X,Y: Integer; aCount: Integer = 100000); var i: Integer; begin for i := 0 to aCount do begin aCanvas.Lock; aCanvas.TextOut(X, Y, IntToStr(i)); aCanvas.Unlock; end; end; //同步执行 procedure TForm1.Button1Click(Sender: TObject); begin TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 10); end).Start; TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 30); end).Start; TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 50); end).Start; TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 70); end).Start; TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 90); end).Start; end; //顺序执行 procedure TForm1.Button2Click(Sender: TObject); begin TThread.Queue(nil, procedure begin Draw(Canvas, 150, 10); end); TThread.Queue(nil, procedure begin Draw(Canvas, 150, 30); end); TThread.Queue(nil, procedure begin Draw(Canvas, 150, 50); end); TThread.Queue(nil, procedure begin Draw(Canvas, 150, 70); end); TThread.Queue(nil, procedure begin Draw(Canvas, 150, 90); end); end;