トップ  >  サンプルソース  >  スレッド制御(C#/VB.NET)

スレッド制御(C#/VB.NET)

2010年06月30日

スレッドの作成/開始/終了/停止/再開を制御するサンプル(ソース/コード)です。

CPUにデュアルコアやクアッドコアを使用しているパソコンが多いですが、スレッド対応していないソフトはその恩恵をあまり受けません。時間の掛かる処理はスレッド処理するように心がけた方が良いと思います。

スレッドの停止/再開にSuspend()/Resume()を使用すると2005では旧形式であると叱られるので、停止中フラグ(suspend)を使用して実現しています。

BackgroundWorkerによるスレッドのサンプルはこちらです。
BackgroundWorkerスレッド(C#/VB.NET)

' -----------------------------------------------------------
' スレッドを制御するサンプル(VB.NET/VS2005)
Private thread1 As System.Threading.Thread
Private thread2 As System.Threading.Thread
Private suspend As Boolean
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    ' スレッド作成
    thread1 = New System.Threading.Thread( _
        New System.Threading.ThreadStart( _
        AddressOf Thread_Proc1))
    thread2 = New System.Threading.Thread( _
        New System.Threading.ThreadStart( _
        AddressOf Thread_Proc2))

    ' スレッド開始
    thread1.Start()
    thread2.Start()
End Sub

Private Sub Button2_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button2.Click
    ' スレッド終了
    thread1.Abort()
    thread2.Abort()
End Sub

Private Sub Button3_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button3.Click
    ' スレッド停止
    suspend = True
End Sub

Private Sub Button4_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button4.Click
    ' スレッド再開
    suspend = False
End Sub

' スレッド処理
Private Sub Thread_Proc1()
    Try
        Do
            If suspend = False Then
                System.Diagnostics.Debug.WriteLine( _
                    "スレッド1:" & DateTime.Now.ToString())
            End If
            System.Threading.Thread.Sleep(500)
        Loop
    Catch ex As System.Threading.ThreadAbortException
        Return
    End Try
End Sub

' スレッド処理
Private Sub Thread_Proc2()
    Try
        Do
            If suspend = False Then
                System.Diagnostics.Debug.WriteLine( _
                    "スレッド2:" & DateTime.Now.ToString())
            End If
            System.Threading.Thread.Sleep(1000)
        Loop
    Catch ex As System.Threading.ThreadAbortException
        Return
    End Try
End Sub
' -----------------------------------------------------------

// ----------------------------------------------------------
// スレッドを制御するサンプル(C#.NET/VS2005)
private System.Threading.Thread thread1;
private System.Threading.Thread thread2;
private Boolean suspend;
private void button1_Click(object sender, EventArgs e)
{
    // スレッド作成
    thread1 = new System.Threading.Thread(
        new System.Threading.ThreadStart(
        Thread_Proc1));
    thread2 = new System.Threading.Thread(
        new System.Threading.ThreadStart(
        Thread_Proc2));

    // スレッド開始
    thread1.Start();
    thread2.Start();
}

private void button2_Click(object sender, EventArgs e)
{
    // スレッド終了
    thread1.Abort();
    thread2.Abort();
}

private void button3_Click(object sender, EventArgs e)
{
    // スレッド停止
    suspend = true;
}

private void button4_Click(object sender, EventArgs e)
{
    // スレッド再開
    suspend = false;
}

// スレッド処理
private void Thread_Proc1(){
    try{
        while (true)
        {
            if (suspend == false)
            {
                System.Diagnostics.Debug.WriteLine(
                    "スレッド1:" + DateTime.Now.ToString());
            }
            System.Threading.Thread.Sleep(500);
        }
    }catch( System.Threading.ThreadAbortException){
        return;
    }
}

// スレッド処理
private void Thread_Proc2()
{
    try
    {
        while (true)
        {
            if (suspend == false)
            {
                System.Diagnostics.Debug.WriteLine(
                    "スレッド2:" + DateTime.Now.ToString());
            }
            System.Threading.Thread.Sleep(1000);
        }
    }
    catch (System.Threading.ThreadAbortException)
    {
        return;
    }
}
// ----------------------------------------------------------
スポンサーサイト

ファイル開くダイアログ(C#/VB.NET) | トップページへ戻る | 祝!!愛ちゃん入籍

このページのトップに戻る

コメント

仕様書作成係

読ませていただきました。
大変参考になりました。
これからも、良い情報の発信をしていだければと思います。
ありがとうございました。

仕様書作成係
http://www.hotdocument.net/

コメントの編集

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る