検索
連載

第2回 .NETにおけるマルチスレッドの実装方法を総括連載.NETマルチスレッド・プログラミング入門(4/4 ページ)

単純なスレッドから、スレッドプールやデリゲートを使った、より機能的なスレッドまで、.NETスレッド・プログラミングを総括。

Share
Tweet
LINE
Hatena
前のページへ |       

タイマーを使ったスレッドの実行

 最後に、タイマーによる特殊なスレッドの呼び出し方法を紹介する。

 System.Threading名前空間にはTimerクラスというクラスが用意されており、一定時間ごとに、ある処理を別スレッドで実行させることができる。以下にそのサンプル・コードを示す。

using System;
using System.Threading;

public class List4
{
  public static void Main()
  {
    // 一定間隔ごとに呼び出すメソッドをTimerCallbackとして登録
    TimerCallback timerCallback
      = new TimerCallback(ThreadMethod); // (1)

    // 現在の時刻を表示
    Console.WriteLine(DateTime.Now);

    // 5秒待ってから、2秒ごとにtimerCallbackメソッドを呼び出す

    Timer timer = new Timer(
      timerCallback, null, 5 * 1000, 2 * 1000); // (2)

    Console.ReadLine();
  }

  // 2秒ごとに実行されるメソッド
  private static void ThreadMethod(object state) // (3)
  {
    Console.WriteLine(DateTime.Now);
  }
}

List4 Timerクラスを利用したC#のサンプル・プログラム(List4.cs)
List4.csのダウンロード

Imports System
Imports System.Threading

Public Class List4

  Public Shared Sub Main()

    ' 一定間隔ごとに呼び出すメソッドをTimerCallbackとして登録
    Dim timerCallback As _
      New TimerCallback(AddressOf ThreadMethod) ' (1)

    ' 現在の時刻を表示
    Console.WriteLine(DateTime.Now)

    ' 5秒待ってから、2秒ごとにtimerCallbackメソッドを呼び出す

    Dim timer As New Timer( _
      timerCallback, Nothing, 5 * 1000, 2 * 1000) ' (2)

    Console.ReadLine()
  End Sub

  ' 2秒ごとに実行されるメソッド

  Private Shared Sub ThreadMethod(state As Object) ' (3)
    Console.WriteLine(DateTime.Now)
  End Sub

End Class

List4 Timerクラスを利用したVB.NETのサンプル・プログラム(List4.vb)
List4.vbのダウンロード

 まずは一定間隔で処理したい動作をメソッドとして作成する。このメソッドもコールバック・メソッドの一種であり、そのメソッドの戻り値はvoid、パラメータはobject型でなくてはならない。サンプルでは、現在の時刻を表示するThreadMethodメソッドをコールバック・メソッドとして作成し、使用している((3))。

private static void ThreadMethod(object state) // (3)
{
  Console.WriteLine(DateTime.Now);
}

 次に、このメソッドをTimerCallbackデリゲート(System.Threading名前空間)として登録する((1))。

TimerCallback timerCallback = new TimerCallback(ThreadMethod); // (1)

 TimerCallbackデリゲートのインスタンスを作成するときには、コンストラクタのパラメータにコールバック・メソッドのメソッド名を記述するだけである。

 最後にTimerクラスのインスタンスとして、先ほど作成したTimerCallbackデリゲートのインスタンスを登録する((2))。

Timer timer = new Timer(timerCallback, null, 5 * 1000, 2 * 1000); // (2)

 このとき、コンストラクタの4つの各パラメータには以下のような内容を指定する。

  • TimerCallbackデリゲートのインスタンス
  • コールバック・メソッドで利用できるステート(object型)
  • コールバック・メソッドを初めて呼び出すまでの時間(ミリ秒単位)
  • コールバック・メソッドを呼び出す間隔(ミリ秒単位)

 上記のサンプルでは、5秒待ってから、2秒置きに現在の時刻を表示している。


 以上、今回は.NETにおけるマルチスレッド・プログラミングの実装方法について解説した。次回はマルチスレッド・プログラミングを行ううえでの注意点を、具体的なコードを用いて解説する。

「連載.NETマルチスレッド・プログラミング入門」のインデックス

連載.NETマルチスレッド・プログラミング入門

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る