在TThread.Execute中加入无限循环是不好的做法?

时间:2011-03-03 21:05:02

标签: multithreading delphi

我写了一个Thread.descendent类,在execute方法中我放了一个无限循环来监听一个com事件,被认为是一个糟糕的线程练习使用无限循环来做到这一点?应用程序工作正常,不冻结,总是响应,我只是回答,因为我想使用最好的方法进行线程化。

procedure TMyThread.Execute;
begin
    while True and not Terminated do
    begin
     AResult:= FListener.GetResult(Param1,Param2,5000);
      if not VarIsNull(AResult) then
        Synchronize(Process);
    end;
end;

2 个答案:

答案 0 :(得分:14)

编译器将其转换为:

while not Terminated do

当这样写出来时,我相信你会同意它看起来很自然。这是一个非常常见的习语。

答案 1 :(得分:7)

这样做是可以的。你正在检查Terminated,这很好。如果您的侦听器允许它并且您的CPU使用率太高,您可以通过在其中放置Sleep(1)来减慢线程速度,但我认为没有必要。