程序比较长,麻烦大家了。谢谢!
我得程序:
//启动线程
public void PrepareRunThread(){
for(int nPortIndex=0;nPortIndex < VarDeclare.arrayPorts.Count;nPortIndex++)
{
//启动线程
objComThread = new Thread(new ThreadStart(ComOper));
objComThread.Name = ReturnCom(objPort.Portid);
objComThread.Start();
SysLog.log("Log.txt",ReturnCom(objPort.Portid)+"采集线程启动");
Thread.Sleep(5);//阻塞当前线程,启动新建立的线程
}
}////////////////////////////////////////////////////////////////////////////////////
以下是线程执行得内容:private void Oper()
{
while(!objMRE.WaitOne(0,false))//看一下是不是有结束线程的信
try
{
//轮寻发送
for(int nTermIndex = 0;nTermIndex < objPort.arrayTerms.Count;nTermIndex++)
{
//锁定arrayTermList,防止其它线程进来
lock(objPort.arrayTerms.SyncRoot)
{
objTermVar = (TermVar)objPort.arrayTerms[nTermIndex];
//先发送命令列表中的帧。
if(objTermVar.arrayCmdList.Count > 0)
{
//命令列表中的当前帧
frameType = (VarDeclare.structFrameType)objTermVar.arrayCmdList[0];
//组帧
byteSendData = objMakeFrames.MakeFrame(ref objTermVar,frameType.enumTransFrameType);
if(!ComBaseOper.Write(byteSendData)
{
continue;
}
else
{
SendStatus("发送成功");
}
if(!ManagerCmdList(ref objTermVar,frameType.enumTransFrameType,nTermIndex,ref objPort.arrayTerms))
{
continue;
}
}else
{
if(VarDeclare.nOnLine != 1)
{
//向终端机发送请求。
//发送帧.如果失败接着发送下一个终端机
if(!ComBaseOper.Write(byteSendData))
{
//收集出错的终端信息
ErrTermInfo(objTermVar);
}
}
else
{
Thread.Sleep(1);
continue;
}
}
}
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
问题是:如果有大于两个线程得情况(也就是VarDeclare.arrayPorts>1)时,第一个线程只执行一次,然后就一直执行第二个线程。我想要得是他们两个轮替执行呀!
我得程序:
//启动线程
public void PrepareRunThread(){
for(int nPortIndex=0;nPortIndex < VarDeclare.arrayPorts.Count;nPortIndex++)
{
//启动线程
objComThread = new Thread(new ThreadStart(ComOper));
objComThread.Name = ReturnCom(objPort.Portid);
objComThread.Start();
SysLog.log("Log.txt",ReturnCom(objPort.Portid)+"采集线程启动");
Thread.Sleep(5);//阻塞当前线程,启动新建立的线程
}
}////////////////////////////////////////////////////////////////////////////////////
以下是线程执行得内容:private void Oper()
{
while(!objMRE.WaitOne(0,false))//看一下是不是有结束线程的信
try
{
//轮寻发送
for(int nTermIndex = 0;nTermIndex < objPort.arrayTerms.Count;nTermIndex++)
{
//锁定arrayTermList,防止其它线程进来
lock(objPort.arrayTerms.SyncRoot)
{
objTermVar = (TermVar)objPort.arrayTerms[nTermIndex];
//先发送命令列表中的帧。
if(objTermVar.arrayCmdList.Count > 0)
{
//命令列表中的当前帧
frameType = (VarDeclare.structFrameType)objTermVar.arrayCmdList[0];
//组帧
byteSendData = objMakeFrames.MakeFrame(ref objTermVar,frameType.enumTransFrameType);
if(!ComBaseOper.Write(byteSendData)
{
continue;
}
else
{
SendStatus("发送成功");
}
if(!ManagerCmdList(ref objTermVar,frameType.enumTransFrameType,nTermIndex,ref objPort.arrayTerms))
{
continue;
}
}else
{
if(VarDeclare.nOnLine != 1)
{
//向终端机发送请求。
//发送帧.如果失败接着发送下一个终端机
if(!ComBaseOper.Write(byteSendData))
{
//收集出错的终端信息
ErrTermInfo(objTermVar);
}
}
else
{
Thread.Sleep(1);
continue;
}
}
}
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
问题是:如果有大于两个线程得情况(也就是VarDeclare.arrayPorts>1)时,第一个线程只执行一次,然后就一直执行第二个线程。我想要得是他们两个轮替执行呀!
Monitor.Enter(this);
//++++++++++++++++++++++++++++++++++++++++++
for(int nPortIndex=0;nPortIndex < VarDeclare.arrayPorts.Count;nPortIndex++)
{
//启动线程
objComThread = new Thread(new ThreadStart(ComOper));
objComThread.Name = ReturnCom(objPort.Portid);
objComThread.Start();
SysLog.log("Log.txt",ReturnCom(objPort.Portid)+"采集线程启动");
Thread.Sleep(5);//阻塞当前线程,启动新建立的线程
}
//+++++++++++++++++++++++++++++++++++
Monitor.Exit(this);
mutex.WaitOne();...mutex.Close();
试试。