当我在线程上调用Free时,为什么我的程序会挂起?

时间:2011-08-15 09:47:17

标签: multithreading delphi

我使用FreeOnTerminate := true放弃了将其显式设置为false,但现在每次尝试显式释放线程时代码都会锁定。我确定锁定发生在Free语句。

对于线程进程的最后一步,我正在向我在主对象中创建的窗口句柄发送一条消息,表示“完成”。在那里我正在运行一个事件,然后免费。为什么会这样?

1 个答案:

答案 0 :(得分:6)

我认为这是典型的多线程死锁。

当你的线程通过sendmessage发送结束信号时,线程等待sendmessage返回,然后它将做任何其他事情(例如免费程序)。同时,你的主线程在完成事件并处理线程的sendmessage之前等待线程释放。

您是否尝试使用postmessage而不是立即返回并且不等待结果?