C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: スレッドの終了


(過去ログ 36 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■18581 / inTopicNo.1)  スレッドの終了
  
□投稿者/ tanaka (63回)-(2008/05/15(Thu) 00:09:01)

分類:[C#] 

メインフォーム画面でプログラム終了をさせる場合(プログラム全部終了)
生成したスレッドに対して終了通知等の処理は必要なのでしょうか。
現状は特に何も処理を入れていません。
引用返信 編集キー/
■18587 / inTopicNo.2)  Re[1]: スレッドの終了
□投稿者/ 出水 (56回)-(2008/05/15(Thu) 00:29:03)
メインスレッドが終わればすべてのスレッドが終了します

ただ、内部で生成したスレッドは途中で打ち切られる形になるので、
終了処理が動かないまま終わってしまいます

なので、基本的には終了通知を送って、
すべてのスレッドが停止したのを確認して終了するという流れになります
引用返信 編集キー/
■18589 / inTopicNo.3)  Re[2]: スレッドの終了
□投稿者/ なちゃ (123回)-(2008/05/15(Thu) 00:34:49)
すべてのフォアグラウンドスレッドが終了しないと終わらなかったことなかったでしたっけ?
バックグラウンドスレッドは勝手に終了させられますが。

引用返信 編集キー/
■18596 / inTopicNo.4)  Re[3]: スレッドの終了
□投稿者/ 渋木宏明(ひどり) (753回)-(2008/05/15(Thu) 01:04:54)
渋木宏明(ひどり) さんの Web サイト
2008/05/15(Thu) 01:06:29 編集(投稿者)

> すべてのフォアグラウンドスレッドが終了しないと終わらなかったことなかったでしたっけ?

です。

Thread.IsBackground = false なワーカースレッドが居残っていると、プライマリスレッドが終了(正確には「したつもり」になっている)していても、プロセスの終了が留保されます。

引用返信 編集キー/
■18599 / inTopicNo.5)  Re[2]: スレッドの終了
□投稿者/ tanaka (64回)-(2008/05/15(Thu) 08:08:55)
No18587 (出水 さん) に返信
> メインスレッドが終わればすべてのスレッドが終了します
>
> ただ、内部で生成したスレッドは途中で打ち切られる形になるので、
> 終了処理が動かないまま終わってしまいます
>
> なので、基本的には終了通知を送って、
> すべてのスレッドが停止したのを確認して終了するという流れになります
終了通知ですが、これはキューを送る通知なのかそれとも終了用のメソッドを
コールするのかどちらのほうがいいのでしょうか。
引用返信 編集キー/
■18602 / inTopicNo.6)  Re[3]: スレッドの終了
□投稿者/ 組込系の人 (47回)-(2008/05/15(Thu) 08:35:30)
私もスレッドの終了方法の作法?って何だろうって思ってました。
子スレッド側の処理にもよりますけど、強制終了しても問題ないスレッドの場合



// メインスレッドからの停止処理
private void ThreadStop(){

    threadA.Abort();// スレッド停止
    threadA.Join();//
}

// スレッドの処理
private void ThreadA()
{
	try{
		while (true){
			// なにかの処理
			Thread.Sleep(1);
		}
	}
	catch (ThreadAbortException)
	{
		// スレッドの終了処理などなど
		return;
	}
}


Abortは推奨されないとか言う噂をきいてから、なにがまずいんだ? とか思う日々・・・・

引用返信 編集キー/
■18660 / inTopicNo.7)  Re[4]: スレッドの終了
□投稿者/ 渋木宏明(ひどり) (754回)-(2008/05/15(Thu) 12:06:45)
渋木宏明(ひどり) さんの Web サイト
> Abortは推奨されないとか言う噂をきいてから、なにがまずいんだ? とか思う日々・・・・

例えば、アンマネージリソースを扱っているような場合、using 句で括っていたとしても、意図したタイミングで IDisposable.Dispose() 呼び出しが行われない可能性があります。

引用返信 編集キー/
■18667 / inTopicNo.8)  Re[4]: スレッドの終了
□投稿者/ NyaRuRu (40回)-(2008/05/15(Thu) 12:26:10)
2008/05/15(Thu) 12:29:38 編集(投稿者)
2008/05/15(Thu) 12:27:14 編集(投稿者)
2008/05/15(Thu) 12:26:45 編集(投稿者)

No18602 (組込系の人 さん) に返信
> Abortは推奨されないとか言う噂をきいてから、なにがまずいんだ? とか思う日々・・・・

「Abortは推奨されない」というか,そもそも「スレッドを安全に停止できるタイミング」が機械的に判定できるか? みたいな問題があって,大抵そこに行き着きます.

例えば,「finally 句を実行中のスレッドを外部から停止できちゃうと安全じゃないよね」というスタンスに立った場合,finally 中で無限ループや何らかの条件待ちを行っているスレッドの存在は非常に厄介な物になります.

その上で,.NET の Thread.Abort には癖があるので注意ですかね.
http://d.hatena.ne.jp/NyaRuRu/20060531/p1
http://d.hatena.ne.jp/NyaRuRu/20060602/p1


引用返信 編集キー/
■18672 / inTopicNo.9)  Re[5]: スレッドの終了
□投稿者/ tanaka (65回)-(2008/05/15(Thu) 12:50:12)
現状はまだ実機とつないでいない上、各スレッドとの結合確認をしている
わけではないのでなんともいえませんが、とりあえずfinallyは使用していないので
Thread.Abortを使用して処理させておこうかと思うのですが…
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -