質問があります。
複数スレッドで複数の同期オブジェクト(CSemaphore)を使用し動作するアプリケーション
を作成しているのですが、それをデバック版で起動しステップ実行していると、パソコン
がフリーズしてしまいます。
フリーズすると、パソコンのHDアクセスなんてしてないのに、マウスカーソルがほとんど
砂時計状態になり、ソフト的にシャットダウンさえもできなくなります。
タスクマネージャも処理がとてつもなく遅くなり、フリーズの原因となったVisualStudio
やアプリのプロセスも終了させられません。
仕方がないので、ハード的にパソコンを再起動しています。
ただ、リリース版だと当現象は全く起きません。
VisualStudioとデバック中アプリが絡むことが原因なのでしょうか?
解決方法を知っている方がいましたら、教えていただけないでしょうか?
ちなみに、使用環境は、
WindowsXP Pro、Visual Studio6.0(SP5)
> 複数スレッドで複数の同期オブジェクト(CSemaphore)を使用し動作する
私の場合、DirectShowのアプリをデバッグしていて良くフリーズします。
マルチスレッド(WMD周りの)が怪しそうなんですが。
(Win2000 + SP2 + VC++Pro + ウイルスバスターCorp)
> ハード的にパソコンを再起動しています。
「再起動」よりも「ログオフ」の方が、イライラが少なくて済みます。
昔、私も似たような現象に遭遇しました。
COleDragSource と COleDropTarget を使って、DnDを行うソフトをデバッグ実行中の
時の事です。DnDを開始して、そのままVisualStudioの上にカーソルを移動した瞬間
(ドロップはしていない)に固まりました。
回避方法がどうしても分からなかった為、その操作をしないようにしました。
上記はVC++6.0(非VS6.0)で起こり、VS7(Pro.)では見られません。
誤字訂正です。
誤:COleDragSource
正:COleDropSource
失礼しました。
Win-2000 VC++6.0 SP5 のマルチスレッドプログラムで同様の現象に悩まされ、
.Net に移行しました。
たみあ さんに教えていただいた掲示板
http://forums.belution.com/ja/vc/000/050/71s.shtml
を見てみると、
・ウィルス対策ソフトの常駐させない。
・WindowsXPにSP1を適用しないといけない。
・VC,NETにしないといけない。
など、みなさんが、いろいろ解決策を講じているみたいでしたが、いずれもだめみたいで
す。
最終的には、IMEをタスクバー内に表示させなければ大丈夫みたいだということになって
いました。
http://forums.belution.com/ja/vc/000/162/33.shtml
IMEをタスクバー内に表示させず、しばらくデバックしてみようと思います。
何かありましたら、また書き込みます。
経験的に、[F5] でビルド&実行した場合に現象が発生しやすいです。
もどかしいですが、ビルドが完了したのを見届けてからおもむろにデバッグ実行した方
が、再現性が低いような気がしています。
経験的に、同期オブジェクトでロックしている範囲に
ブレークポイントを設置して、そこでブレークすると、
フリーズすることが多い気がします。なので、次回か
らはロック前の位置でブレークさせたりしています。
経験的に、DirectShowで、ビデオやオーディオの再生を
している途中で、ブレークし、ステップ実行していると
リソース不足が発生し、しまいに、無応答になります。
そこで、そのような位置でブレークした場合は、
ステップ・トレースを使わず、ブレークポイント+実行で
こまめにブレークするようにしています。
#これは、実行すると、DirectShowのレンダラーなどが
#実行でき、メディアサンプルの処理が行われるからだ、
#と解釈しています。
#あくまでも、経験的にですが。
#そもそも、デバッガがこけるとは何事だ、ぷんぷん