我正在使用 Delphi 2006,但我正在开发的应用程序有点问题。
我有一个创建一个线程的表单,该线程调用一个执行冗长操作的函数,我们称之为 LengthyProcess。在 LongyProcess 函数中,我们还调用了几个 Dll 函数,它们也创建了自己的线程。
我遇到的问题是,如果我不使用我的线程的 Synchronize 函数来调用 LengthyProcess 线程停止响应(主线程仍然响应良好)。我不想使用 Synchronize,因为这意味着主线程正在等待 LongyProcess 完成,因此违背了创建单独线程的目的。
我已经将问题追踪到 dll 中的一个函数,该函数创建一个线程然后调用 WaitFor,顺便说一句,这一切都是使用 TThread 完成的。WaitFor 检查 CurrentThreadID 是否等于 MainThreadID,如果是,那么它将调用 CheckSychronization,一切都很好。所以如果我们使用 Synchronize 那么 CurrentThreadID 将等于 MainThreadID 但是如果我们不使用 Synchronize 那么当然 CurrentThreadID <> MainThreadID,当这种情况发生时,WaitFor 告诉当前线程(我创建的线程)等待由DLL 和 CheckSynchronization 永远不会被调用,我的线程最终会永远等待在 dll 中创建的线程。
我希望这是有道理的,对不起,我不知道有什么更好的方法来解释它。有没有其他人遇到过这个问题并且知道如何解决它?