这是等待Thread.finalization并保持我的应用程序响应的正确方法

Sal*_*dor 13 delphi multithreading waitforsingleobject

实际上我使用这个代码并且工作正常,但我想知道是否是正确的方法.

  while WaitForSingleObject(MyThread.Handle, 0) = WAIT_TIMEOUT do
    Application.ProcessMessages;

  ShowMessage('i am done');
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 13

VCL TThread类有自己的WaitFor()方法,在主线程上下文中调用时在内部泵送主消息队列:

MyThread.WaitFor; 
ShowMessage('i am done'); 
Run Code Online (Sandbox Code Playgroud)


Mas*_*ler 8

Application.ProcessMessages通常认为呼叫是代码气味.如果没有任何关系,让你的主线程闲置.

如果你经营一家公司,并且需要你的一个工人去商店买一些急需的用品,那么你会在门口走一步直到他回来,或者你更愿意坐在你的办公室休息等待他,并发现供应品在这里,因为你听到他走过门?无论哪种方式,他都会花费相同的时间,但第一种方式就是把你的腿伸出去.

同样,让线程报告回UI,而不是让您的UI观察线程.一种方法是让线程用于PostMessage将自定义消息发送到完成后启动它的表单,并在表单上放置一个消息处理程序来响应它.