C# 入門 & 実践 / C sharp
501-4. ParameterizedThreadStart でパラメータを渡す!
counter に スリープタイムを渡します。
ThreadStart ではなくParameterizedThreadStartを使用して
Start( object )の形で変数を渡します。
object なので、classでもなんでもOKです。
private void goThread()
{
Thread t1 = new Thread(new ParameterizedThreadStart(counter));
t1.Name = "T1";
Thread t2 = new Thread(new ParameterizedThreadStart(counter));
t2.Name = "T2";
t1.Start(10);
t2.Start(20);
// 終わるまで待つ。
t1.Join();
t2.Join();
this.textBox1.Text = res;
}
private void counter(object sleep_o )
{
int sleep_i = (int)sleep_o;
try
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep( sleep_i );
int temp = Interlocked.Increment(ref count);
lock (this)
{
res += Thread.CurrentThread.Name + " : " + count + "\r\n";
}
}
}
finally
{
end_check++;
}
}
こうすると、T1のほうが2倍の速さで終わって、その後は、T2だけが処理していますね。
T1 : 1
T2 : 2
T1 : 3
T1 : 4
T2 : 5
T1 : 6
T1 : 7
T2 : 8
T1 : 9
T1 : 10
T2 : 11
T1 : 12
T1 : 13
T2 : 14
T1 : 15
T2 : 16
T2 : 17
T2 : 18
T2 : 19
T2 : 20
だいたいこれだけで、OKです。
さらに、細かく開始・終了を管理したい場合は、Moniterを利用します!
次回はMoniterを利用します。
501-3. Interlocked で数値増減 «
マルチスレッド同期 »
501-5. Moniterで同期管理
C# 入門 & 実践 / C sharp