Delphi 2006 を使用していますが、開発中のアプリケーションに少し問題があります。
私は、長い操作を実行する関数を呼び出すスレッドを作成するフォームを持っています。LengyProcess と呼びましょう。LengthyProcess 関数内では、独自のスレッドを作成するいくつかの Dll 関数も呼び出します。
私が抱えている問題は、スレッドの Synchronize 関数を使用して LengthyProcess を呼び出さないと、スレッドが応答を停止することです (メイン スレッドは引き続き正常に応答します)。メインスレッドがLengyProcessの終了を待っているため、別のスレッドを作成する目的が無効になるため、Synchronizeを使用したくありません。
スレッドを作成してから WaitFor を呼び出す dll 内の関数まで問題を追跡しました。これはすべて TThread を使用して行われます。WaitFor は、CurrentThreadID が MainThreadID と等しいかどうかを確認し、等しい場合は CheckSynchronization を呼び出します。すべて問題ありません。したがって、Synchronize を使用する場合、CurrentThreadID は MainThreadID と等しくなりますが、Synchronize を使用しない場合、もちろん CurrentThreadID <> MainThreadID となり、これが発生すると、WaitFor は現在のスレッド (私が作成したスレッド) に、 DLL であるため、CheckSynchronization が呼び出されることはなく、スレッドは dll で作成されたスレッドを永遠に待機することになります。
これが理にかなっているといいのですが、申し訳ありませんが、これ以上の説明方法がわかりません。他の誰かがこの問題を抱えていて、それを解決する方法を知っていますか?