• 締切済み

スレッドについて

お世話様です。 Windowsのスレッドについて質問です。(WinXP C#.NET2003) 以下のようなコードでスレッドを作成した場合、どうなるのか教えてください。 private void BTN_input_Click(object sender, System.EventArgs e) { Thread iwth = new Thread( new ThreadStart(InputWaitThread) ); iwth.Start(); } (1)iwthは動的に割り当てたのでBTN_input_Click関数内でのみ有効だと  思うのですが、BTN_input_Click関数を抜けてしまったあとは、  InputWaitThreadを実行するスレッドは  どういう位置づけになるのでしょうか?  (ゾンビプロセスですか?) (2)また、このコードを含むアプリケーションの終了時、  InputWaitThreadがまだ終了していない場合は、  強制的に終了されるのでしょうか? (3)InputWaitThreadが必ず終了するという保障がない場合には、  KILLしてやらなければいけないと思いますが、動的に割り当てたので  ハンドラがおらずKILLできませんが、どうすればいいのでしょうか?  (静的に割り当てておくしかないのでしょうか?) 以上、よろしくご教授願います。(@±@)

みんなの回答

回答No.2

#1です。 回答ボタンを押した後で不安になってきました(汗) (1)についてはゾンビにならないと書きましたが、スレッド終了待ちしないとゾンビプロセスになると思います。ごめんなさい

SafeGuard
質問者

お礼

回答ありがとうございます。 当方、投稿後も調べておりまして自己解決いたしました。 フォアグラウンドスレッド、バックグラウンドスレッドのキーワードで 調べたら解答がでてきました。 フォアグラウンド…親が死んでも子は死なない。 バックグラウンド…親が死んだら一緒に子が死ぬ。 .Start()まえに、.IsBackground = true/false で選択できるみたいです。 (デフォルトはフォアグラウンド) この辺になるとOS/開発言語依存するので難しいですね(^^;

回答No.1

Windowsのスレッドは詳しくないのですが一般的な話で。 (1)BTN_input_Click関数を抜けてしまったあとは・・ BTN_input_Click関数を抜けてしまったあとが気になるようですが、そこも作るのですよ。たとえば×ボタンが押されたらスレッドの終了とか。またゾンビというのは親プロセス(スレッドを呼び出した元のプロセス)が先に死んでしまうことで、スレッドであれば親プロセスが死んだらついでに死んでしまうと思います。 (2)また、このコードを含むアプリケーションの終了時、 InputWaitThreadがまだ終了していない場合は、  強制的に終了されるのでしょうか? そういうつくりにならないように実装します。そうなったらバグですので。 3)InputWaitThreadが必ず終了するという保障がない場合には、  KILLしてやらなければいけないと思いますが、 これもバグでは?やるとしたらタイマーをかけて自身を殺すくらいかな、でもInputWaitThreadが必ず終了するようなつくりを考えたほうが建設的かも。 間違ってたらご容赦

関連するQ&A