2009-04-14 6 views
0

ハングしたスレッドを検出することはできますか?このスレッドは、スレッドプールの一部ではなく、単なるシステムスレッドです。スレッドはハングしているため、イベントを処理しないことがあります。ハングしたスレッドを検出するにはどうすればよいですか?

おかげで、理論的には

+0

どのプラットフォームですか?私はもっ​​と詳細が必要だと思う。 – fido

+0

私はよく吊るされたスレッドを検出する方法を知っていますが、それは特に重要ではないと思います。 – Pesto

+0

あなたの背後に1つのミラーを置き、あなたの前に1つのミラーを置きます。その鏡の側に少し立って、あなたの背後にある鏡の反射を見ることができます。この設定では、あなたのセーターやスラックスを見て、その厄介な吊り下げ糸を検出することができます。一度あなたはスレッドを見つけましたが、それを引っ張ってはいけません!そうすることで、あなたの全体のセーターを解くか、またはあなたのスラックスに "走り"を起こすことができます。 –

答えて

3

は、それがimpossibleです。 Windows上でスレッドがデッドロックされている可能性があると思われる場合は、GetThreadContextを数回使用して常に同じかどうかを確認できますが、どの程度信頼性が高いかはわかりません。

+0

+1が不可能なため – rmeador

+0

提案された解決策は、スレッドが「ハングアップ」しているように見える可能性はごくわずかです。それはデッドロックを捕まえるかもしれませんが、ライブロックを捕らえることはありません。 – erikkallen

1

理論上ではありませんが、実際には作業負荷によっては可能かもしれません。たとえば、イベントに応答することになっている場合は、スレッドメッセージを(ウィンドウに)投稿し、それが応答するかどうかを確認できます。イベントやフラグを設定して何かをさせることができます。応答があったかどうかを知るには「合理的な」時間を待たなければなりません。問題は、本当に吊り下がっていて、単に応答するのに長い時間がかかっていなくても、「ハング」スレッドを使って何をするのかということが起こります。スレッドは一般的に安全に死ぬことはできず、通常は任意のスレッドに割り込むことはできません。エフェクトにメッセージを記録するのは十分安全ですが、誰が気にしますか?おそらく最も良いことは、それをメモしてハングアップさせるバグを見つけ出すことです。

0

実行される処理の種類や処理の種類やその他の詳細によっては、ハングしたスレッドを検出することができます。場合によっては、現代のVMは、2つのスレッドが他のスレッドがロックを解放するのを待っているロックデッドロックを検出できます。 (ただし、これは必ずしも可能ではないので、時にはこれに頼らないでください。)

あなたの質問に特定の回答を与えるには、さらに多くの情報が必要です。

関連する問題