实际上我正在使用这段代码,工作正常,但我想知道是否正确的方式。
while WaitForSingleObject(MyThread.Handle, 0) = WAIT_TIMEOUT do
Application.ProcessMessages;
ShowMessage('i am done');发布于 2010-11-16 11:49:27
调用Application.ProcessMessages通常被认为是一种代码气味。如果你的主线程无事可做,那就让它空闲。
如果你经营一家公司,需要你的一名员工跑到商店去拿一些急需的补给,你会在门口徘徊,直到他回来,还是更愿意坐在办公室休息等他,因为你听到他走进门,才发现补给在这里?不管怎样,他都会花同样多的时间,但第一种方法会让你筋疲力尽。
类似地,不是让UI监视线程,而是让线程向UI报告。要做到这一点,一种方法是让线程使用PostMessage向启动它的窗体发送定制消息,并在窗体上放置一个消息处理程序来响应它。
发布于 2010-11-18 10:54:49
VCL TThread类有它自己的WaitFor()方法,当在主线程上下文中调用时,该方法在内部抽出主消息队列:
MyThread.WaitFor;
ShowMessage('i am done'); 发布于 2010-11-16 11:49:44
它看起来是正确的(如果正确意味着它完成了工作)。我要改变的是等待更多一点的时间(50ms看起来很适合保持应用程序的响应性),同时不占用CPU。
while WaitForSingleObject(MyThread.Handle, 50) = WAIT_TIMEOUT do
Application.ProcessMessages;
ShowMessage('i am done');当然还有其他方法可以做到……但我通常会应用其中一个主要的工程原理:
如果它能工作,不要碰它!
https://stackoverflow.com/questions/4190872
复制相似问题