2012-04-05 1 views
1

実行時に例外を捕捉したスレッドのスタックトレースを出力できます。同じプロセス内で実行されている他のスレッドの痕跡も印刷する必要があります。私は例外が1つのスレッドで捕捉されるとすぐにすべてのスレッドをフリーズする良い方法を見つけることに興味があります。スレッドが例外を検出したときにすべてのスレッドをフリーズすることは可能ですか?

今のところ私ができるのは、アクティブなスレッドごとにクエリを実行してからSuspendThread()を実行することだけです。ただし、これにより、最初の例外がキャッチされた後に各スレッドが少し長く実行されます。すべてのスレッドを即座に中断させる方法はありますか?

ありがとうございました。

+1

プロセスをクラッシュレポートで停止しますか?あなたが別のスレッドに送るシグナルのどんな種類にも時間がかかります。私は本当の疑問はあなたの目的に合っていると思っています。瞬間としての資格はありますが、そこではどのようにシグナルが得られますか? –

+2

私は、たとえマルチコア/マルチプロセッサマシンなどであっても、一般的には「即時」とは考えられません。コア#1のスレッドがクラッシュした場合、コア#2はスレッドを停止することをどのように知っていますか?コア#1は、コア#2に「疑わしいスレッド」メッセージを送信する必要があります。この時点までに、コア#2のスレッドはすでにいくつかの命令を実行していました。 –

+0

アプリケーションのアーキテクチャに応じて、スレッドの代わりにファイバーを使用することができます。 (もちろん、リリース版ではこれをしたくないかもしれませんが、デバッグには問題ありません) –

答えて

2

例外がキャッチされたワーカースレッドからGUIスレッドにPostMessage()を使用しようとしましたか?

提案されているように簡単なステップ:
1)GUIスレッドが
2少数のワーカースレッドを生成)ワーカースレッドのPostMessage()を1回キャッチ例外
3)GUIスレッド受信メッセージ
4)GUIスレッド指示し、残りのワーカースレッドに

注意を一時停止:このところで

独自のメッセージを定義し、あなたはまだあなたのワーカースレッドをサスペンドする前に、いくつかの遅延が表示されます。

別の方法として、ワーカースレッド間でイベントハンドルのような同期オブジェクトを使用する方法があります。

関連する問題