2011-12-09 19 views
11

2つのstd :: threads AとBを指定すると、Aはその目的でBにカスタムコードを使用せずにBをサスペンドできますか?別のスレッドからのスリープスレッド

現時点では、Bは非常に複雑なアルゴリズムであり、時にはA(監視スレッド)が通知するときに、何らかの共有フラグをチェックすることできれいに終了する必要があります。 問題は、デバッグの目的のために、Aがどのような状態Bであるかを正確に知りたいときです(例えば、共有フラグのチェックを忘れた場所を見るために)Aがそのような終了を要求しているので、B(デバッグ用) A.

ありがとうございます。 ブロー

+1

これは、デバッガを使用して行うことができます。 Visual Studioでは、スレッドを右クリックして「フリーズ」を選択するだけです。私はGDBにも同様の機能があると確信しています – jalf

+0

技術的には「一時停止」ではありませんが、SIGSEGVを使用してA内のプロセスを強制終了し、コアダンプを調べることを検討してください。 – thiton

+0

@jalf:この場合、Aがフラグを設定する状態を取得することはほとんど不可能です。 –

答えて

6

システムによって異なります。 WindowsにはSuspendThreadという機能がありますが、私はそれについてあまり知らないと認めます。 Unixでは、pthread_kill(その名前にもかかわらず、スレッドを殺すのではなくシグナルを送るだけです)を使ってスレッドにシグナルを送ることができます。シグナルハンドラが呼び出せるターゲットスレッドでシグナルを捕捉できます。 sleep

+0

'SuspendThread()'は素晴らしいですが、後で 'ResumeThread()'を呼び出さなければならないか、スレッドは永久に中断されます。 – sharptooth

+0

@sharptooth誰かがスレッドAでなければなりません。 –

+0

@VJovic:そうですが、そうすることを忘れる可能性があります。特定の時間、別のスレッドを一時停止して自動応答する機能があれば、素晴らしいことでしょう。私は何も知らない。 – sharptooth

関連する問題