加载中…
个人资料
红鱼儿
红鱼儿
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,350,194
  • 关注人气:241
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Delphi 10.1 berlin TTask存在的二个问题

(2016-07-21 20:49:50)
标签:

it

分类: Delphi10.1
问题一
在使用TTask的过程中,发现了问题,到QC上查,有人提出了,
地址在这里,官方已经Open。
具体来说,看提出者写的代码:
procedure TForm1.StartClick(Sender: TObject);
var I: Integer;
begin
 
  for I := 1 to 25 do  begin
    TTask.Create(
      procedure
      begin
        sleep(maxint);
      end).start;
  end;
 
  label1.Text := 'Start';
 
  TTask.Create(
    procedure
    begin
      TThread.Synchronize(nil,
        procedure
        begin
          label1.Text := 'Executed';
        end);
    end).start;
 
end;
这段代码首先建立了25个长时间执行的任务,然后显示Lable1,再开启一个线程,同步显示Lable1.结果就是Lable1.Text:='Start'及下面的代码得不到执行。
这个问题暂时的解决方法就是自己设置线程池最小的线程数来解决,在官方的回复中也可看到。

问题二:

这个问题还没人提,那就是:
TTask.WaitForAll(tasks);
如果tasks执行时间长,这个WaitForAll不会等待就继续了.实际上看TTask.WaitForAll(tasks),是执行的
  Result := DoWaitForAll(Tasks, INFINITE);,也就是用最长的超时时间等任务结束。
这个问题暂时解决的办法就是自己加个超时间,如:
TTask.WaitForAll(tasks,1000*30);


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有