阻塞循环时线程代码不稳定

时间:2011-08-11 21:31:58

标签: multithreading delphi

我正在尝试使用线程进程,但是多次执行似乎变得更加不稳定。有没有人对如何确定原因是什么有任何想法?但是,一个很大的区别是,我在多次执行时使用了一个阻塞循环,而不是让它像我编码那样异步通过。

这是我正在使用的等待循环代码(最明显的起点)。我需要这样做,所以TMainObject可以处理FThreadProcess发送的消息中的任何事件。

procedure TMainObject.WaitForCompletion;
  begin
    repeat
      Application.ProcessMessages;
    until WaitForSingleObject(FThreadProcess.Handle, 20) = WAIT_OBJECT_0;
  end;

当我采取每个项目并在不同的运行中异步处理它时,我没有任何问题。有没有人对要检查的事情有任何其他想法?感谢。

1 个答案:

答案 0 :(得分:10)

仅根据此处提供的信息,受限制,我不得不说Sertac Akyuz的评论可能是正确的。如果线程在您处理消息时完成,并且线程设置了FreeOnTerminate,那么您的WaitForSingleObject调用将以多种不同的方式失败。

要做到这一点,请启动该线程,然后让它做的最后一件事就是将消息发回给任何一个启动它的表单,并在那里放置一个消息处理程序,启动“工作完成”代码。

这是为什么应尽可能避免对Application.ProcessMessages进行显式调用的另一个例子。