趣味は車輪の再発明♪

スレッド終了 - [ マルチスレッド / C# ]


「小さな小さなサンプル&スニペット」
▲インデックスへ戻る▲
カテゴリ:「マルチスレッド」

バックグラウンドで一定の処理を繰り返しているスレッドを外部から安全に終了させる場合のテンプレートです。

using System.Threading;

public class Foo {
	
	private Thread thread = null;
    private bool running;//スレッド実行フラグ
    
    //スレッド開始
    public void StartThread() {
    	if(thread == null) {
			thread = new Thread(new ThreadStart(threadMain));
    		running = true;//これ重要
			thread.Start();
		}
    }
    
    //スレッド終了
    public void EndThread() {
    	if(thread != null) {
    		running = false;//終了要求
    		thread.Join();//実際に終了するのを待つ
    		thread = null;
    	}
    }

	//スレッドメイン    
	private void threadMain() {
	    while(running) {
			//スレッドの処理
		}
	}
}		

bool型変数の排他処理は不要。

これはスレッドの再実行可能な実装例です。その必要がなければもっと単純になります。

本来「その機能が別スレッドで実装されている」とpublicに認識させる必要はないと思いますから、開始と終了のメソッドはprivateとするべきかもしれません。

カテゴリ「マルチスレッド」の他のエントリ:
| ワーカースレッドからUI更新 | スレッド開始 |



RSS Feed Widget
スレッド終了 - [ マルチスレッド / C# ]
(http://bicycle.life.coocan.jp/takamints/index.php/snippets/snippet/mt/endthread/cs)
by Koji Takami ( email: vzg03566@gmail.com, GitHub: takamin )