スレッドプールの一時停止処理
- 題名: スレッドプールの一時停止処理
- 著者: ピッペン
- 日時: 2012/09/24 19:45:44
- ID: 30965
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: スレッドプールの一時停止処理
- 著者: オショウ
- 日時: 2012/09/24 23:16:46
- ID: 30966
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: スレッドプールの一時停止処理
- 著者: ピッペン
- 日時: 2012/09/25 10:01:30
- ID: 30967
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: スレッドプールの一時停止処理
- 著者: ピッペン
- 日時: 2012/09/25 10:47:05
- ID: 30968
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
環境:VC#2010 Win2008Server
はじめまして。
上記環境にてプログラムを作成しています。
スレッドプールで該当タスクのみ一時停止させたいのですが、
どのようにすれば実現可能でしょうか?
sleepでは先に進んでしまうので困っています。
以下のような電文送信処理をスレッドプールで実装しています。
******************************************************************
send = new WaitCallback(Send);
void Send(object obj)
{
string msg;
TaskABC tabc = (TaskABC)obj;
msg = tabc.strabc;
MSG = msg;
ot = tabc.taskOutou;
for (int i = 1; i <= 3; i++)
{
if (MSG[ot] != "")
{
//電文送信
try
{
serialPort2.WriteLine(msg);
}
catch
{
//送信エラー
}
//2000msec待機して繰り返す
System.Threading.Thread.Sleep(2000);
}
else
{
//再送信の必要がない場合
break;
}
}
}
public class TaskABC
{
//Sendに渡すデータ
public string strabc;
public int taskOutou;
//コンストラクタ
public TaskABC(string st1, int outou)
{
strabc = st1;
taskOutou = outou;
}
}
private void button3_Click(object sender, EventArgs e)
{
TaskABC tabc;
tabc = new TaskABC("DEF", ott);
System.Threading.ThreadPool.QueueUserWorkItem(send, tbac);
ott = ott + 1;
}
*********************************************************************
上記、スレッドプールにて2000msec間隔でデータを送信したいのですが、
うまくいきません。
MSG != ""が成立している場合、
DEF送信 (2秒後) DEF送信 (2秒後) DEF送信
という処理をしたいのですが、
DEF送信 (2秒後) DEF送信×2 (2秒後) DEF送信×3 (2秒後) DEF送信×3 (2秒後) DEF送信×2
となって、合計で11回もDEFが送信されてしまいます。
なお、スレッドプールにしているのは、
DEF送信 (2秒後) DEF送信 (2秒後) DEF送信の処理の間に、
GHI送信 (2秒後) GHI送信 (2秒後) GHI送信という処理を挟みたいからです。
※MSGは受信スレッドにて返信確認をすると""になります。
よろしくお願いします。