最後に、タイマーによる特殊なスレッドの呼び出し方法を紹介する。
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);
}
}
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
まずは一定間隔で処理したい動作をメソッドとして作成する。このメソッドもコールバック・メソッドの一種であり、そのメソッドの戻り値は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つの各パラメータには以下のような内容を指定する。
上記のサンプルでは、5秒待ってから、2秒置きに現在の時刻を表示している。
以上、今回は.NETにおけるマルチスレッド・プログラミングの実装方法について解説した。次回はマルチスレッド・プログラミングを行ううえでの注意点を、具体的なコードを用いて解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.