- PR -

join でフリーズ

投稿者投稿内容
未記入
会議室デビュー日: 2008/03/31
投稿数: 9
投稿日時: 2008-04-02 15:32
回答が遅くなり申し訳ないです。

obj.start()は特に重い処理でもなんでもありません。
joinを外すと一瞬で終わります。
joinをつけていたらいつまで待っても終わらないのです。
ぱてお
常連さん
会議室デビュー日: 2008/03/07
投稿数: 41
投稿日時: 2008-04-02 17:02
提示されているコードが提示用にアレンジされているとして
(Objectクラスにstartメソッドがない事からしてもそうですが)
こういう話をする場合、再現する最小限のコードを提示しないと
問題に対する認識を統一できないと思いますよ。

MSDNのサンプルから持ってきた単純な例ではそういう事は起きていません。
サンプルの内容と付き合わせてみたら何かわかるかもしれませんね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-04-02 22:49
引用:

未記入さんの書き込み (2008-04-02 15:31) より:

obj.start()は特に重い処理でもなんでもありません。
joinを外すと一瞬で終わります。
joinをつけていたらいつまで待っても終わらないのです。



メインスレッドが終わるのだから、他のスレッドも終わらされるだろうね。

「特に重い処理でも何でもない」ということですが、それの有無で挙動が変わる以上、そこに何らかの原因があると考えるのが普通です。
そして、Object には start などというメソッドはないので、提示されているコードを我々が試して、「おっしゃることが正しい」と認めることができません。また、全体的な実行はされているようですが、obj.start だけに限って「処理が一瞬ですむ」ことを検証はされていないように見受けられます。

そんなわけで、今出てきている情報からは、「obj.start に時間がかかるだけじゃないの?」と言わざるをえません。
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-04-03 15:32
他の人がおっしゃるように、おそらく object.start() の中に問題があるように思います。

1つの確認方法として、Visual Studio から起動して、
未記入さんがおっしゃる「フリーズ」した状態になったときに、
Visual Studio のメニューの「デバッグ」→「すべて中断」で停止させてみてください。
メインスレッドはおそらく、Join の行で止まっていると思います。
そこで、(表示されていなければ)「デバッグ」→「ウィンドウ」→「スレッドで」、
スレッドウィンドウを表示させて、ワーカースレッドがどこで中断されているかを
覗いてみてください。

スキルアップ/キャリアアップ(JOB@IT)