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

Gle*_*234 1 delphi multithreading

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

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

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

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

Mas*_*ler 10

仅根据此处提供的信息,仅限于此,我不得不说Sertac Akyuz的评论可能是正确的.如果线程在处理消息时完成,并且线程已FreeOnTerminate设置,则您的WaitForSingleObject调用将以任何数量的不同方式失败.

要做到这一点吧,启动线程关闭,然后有它确实是发布一条消息回取其形式开始它关闭的最后一件事,并把消息处理程序上有揭开序幕的"工作完成"代码.

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

  • @Glenn:这些都是复杂的问题,需要更多的详细信息和更多的空间,这里的字符限制可以很好地回答它们.尝试提出两个新问题,你可能会在这里找到一些好的答案. (2认同)