2011-08-15 2 views
3

私はFreeOnTerminate := trueを使って明示的にfalseに設定しましたが、明示的にスレッドを解放しようとするたびにコードがロックされます。私はロックアップがFreeステートメントで発生すると判断しました。スレッドでフリーを呼び出すと、プログラムがハングアップするのはなぜですか?

スレッドプロセスの最後のステップでは、メインオブジェクトで作成したウィンドウハンドルにメッセージを送信して、「終了」を知らせます。そこでは、私はイベントを実行しているし、自由をしています。なぜこれが起こるのですか?

+2

スレッドを解放するコードと、スレッドで実行されるコードを表示する必要があると思います。 –

+0

メインスレッドが空きを待っているのと、メッセージが処理されるのを待っているスレッドとの間のデッドロックのように聞こえますが、メインスレッドが待機しているために発生しません。 –

答えて

6

これは典型的なマルチスレッドデッドロックだと思います。

あなたのスレッドがsendmessageによって終了信号を送信すると、スレッドはsendmessageが返すのを待ってから、何か他の処理(たとえば、フリープロシージャ)を行います。同時に、メインスレッドはスレッドが解放されるのを待ってからイベントを終了し、スレッドのsendmessageを処理します。

代わりにpostmessageを使用しようとしましたが、すぐに戻り、結果を待つことはありませんでしたか?

+0

PostMessageを使用しました。ありがとう! – Glenn1234

関連する問題