创建一个VCL表单应用程序,在表单上放置一个TButton和一个TMemo,然后在按钮的OnClick处理程序中编写以下代码:
现在运行程序并进行以下测试:
uses
OtlParallel, OtlTaskControl;
procedure TForm2.btnStartLoopClick(Sender: TObject);
var
starttime: Cardinal;
k: Integer;
begin
mmoTest.Lines.Clear;
for k := 1 to 50 do
mmoTest.Lines.Add('Line ' + IntToStr(k));
starttime := GetTickCount;
Parallel.Async(
procedure
var
i: Integer;
begin
for i := 1 to 50 do
begin
Sleep(100);
mmoTest.Lines[i - 1] := mmoTest.Lines[i - 1] + FormatDateTime(' nn:ss:zzz', Now);
end;
end,
Parallel.TaskConfig.SetPriority(TOTLThreadPriority.tpHighest).OnTerminated(
procedure
begin
mmoTest.Lines.Add(IntToStr(GetTickCount - starttime) + ' milliseconds');
end));
end;
现在运行程序并进行以下测试:
点击按钮,等待循环完成后查看备忘录中显示的时间:应该约为5300毫秒。
现在再次点击按钮,在循环完成之前单击并按住窗体的标题栏,并快速移动窗体。现在再次查看备忘录的最后一行:在我的测试中,时间超过了7000毫秒。显然,主线程正在阻塞并行线程!