- - PR -
join でフリーズ
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-04-02 15:32
回答が遅くなり申し訳ないです。
obj.start()は特に重い処理でもなんでもありません。 joinを外すと一瞬で終わります。 joinをつけていたらいつまで待っても終わらないのです。 | ||||
|
投稿日時: 2008-04-02 17:02
提示されているコードが提示用にアレンジされているとして
(Objectクラスにstartメソッドがない事からしてもそうですが) こういう話をする場合、再現する最小限のコードを提示しないと 問題に対する認識を統一できないと思いますよ。 MSDNのサンプルから持ってきた単純な例ではそういう事は起きていません。 サンプルの内容と付き合わせてみたら何かわかるかもしれませんね。 | ||||
|
投稿日時: 2008-04-02 22:49
メインスレッドが終わるのだから、他のスレッドも終わらされるだろうね。 「特に重い処理でも何でもない」ということですが、それの有無で挙動が変わる以上、そこに何らかの原因があると考えるのが普通です。 そして、Object には start などというメソッドはないので、提示されているコードを我々が試して、「おっしゃることが正しい」と認めることができません。また、全体的な実行はされているようですが、obj.start だけに限って「処理が一瞬ですむ」ことを検証はされていないように見受けられます。 そんなわけで、今出てきている情報からは、「obj.start に時間がかかるだけじゃないの?」と言わざるをえません。 | ||||
|
投稿日時: 2008-04-03 15:32
他の人がおっしゃるように、おそらく object.start() の中に問題があるように思います。
1つの確認方法として、Visual Studio から起動して、 未記入さんがおっしゃる「フリーズ」した状態になったときに、 Visual Studio のメニューの「デバッグ」→「すべて中断」で停止させてみてください。 メインスレッドはおそらく、Join の行で止まっていると思います。 そこで、(表示されていなければ)「デバッグ」→「ウィンドウ」→「スレッドで」、 スレッドウィンドウを表示させて、ワーカースレッドがどこで中断されているかを 覗いてみてください。 |