我正在尝试使用线程进程,但是多次执行似乎变得更加不稳定。有没有人对如何确定原因是什么有任何想法?但是,一个很大的区别是,我在多次执行时使用了一个阻塞循环,而不是让它像我编码那样异步通过。
这是我正在使用的等待循环代码(最明显的起点)。我需要这样做,所以TMainObject可以处理FThreadProcess发送的消息中的任何事件。
procedure TMainObject.WaitForCompletion;
begin
repeat
Application.ProcessMessages;
until WaitForSingleObject(FThreadProcess.Handle, 20) = WAIT_OBJECT_0;
end;
当我采取每个项目并在不同的运行中异步处理它时,我没有任何问题。有没有人对要检查的事情有任何其他想法?感谢。
答案 0 :(得分:10)
仅根据此处提供的信息,受限制,我不得不说Sertac Akyuz的评论可能是正确的。如果线程在您处理消息时完成,并且线程设置了FreeOnTerminate
,那么您的WaitForSingleObject
调用将以多种不同的方式失败。
要做到这一点,请启动该线程,然后让它做的最后一件事就是将消息发回给任何一个启动它的表单,并在那里放置一个消息处理程序,启动“工作完成”代码。
这是为什么应尽可能避免对Application.ProcessMessages
进行显式调用的另一个例子。