现有一套读串口的函数,但不知多线程等待多串口数据该如何编写?
无从下手,不知该如何编写。
我的想法:一个主线程,假设4个串口。4个辅助读写成监控四个串口,收到串口信息后则发消息给主线程处理。主线程处理完后,则利用四个辅助写线程把数据发送给相应的串口(根据串口编号来)。
请大家来说说,这种想法对否?
HANDLE hReceive2,hReceive3,hReceive4,hReceive5,hReceive6;//hReceive6
DWORD ThreadRec2,ThreadRec3,ThreadRec4,ThreadRec5,ThreadRec6;//ThreadRec6;
int port2,port3,port4,port5,port6,che;//port6;
int* Data2,Data3,Data4,Data5,Data6;//Data6;
DWORD CALLBACK ThreadReceive(LPVOID lParam)// void *tr2,int portN
{
PORTDATA *dt=(PORTDATA *)lParam;
int data,InPtr,ii,chk;
bool ready;
unsigned char inbuff,help;
unsigned char ByteZaehler,ByteAnzahl;
unsigned char DatenByte[256];
unsigned char kenn1,kenn2;
//for init;
//==============
int portX = dt->portN; //==当前端口号
//==============
ready=false;
InPtr=0;
chk=0;
while(true)
{
// 接受串口数据的代码
}
}
//-----------
void __fastcall TMain::FormCreate(TObject *Sender)
{
int ret,i;
app_path=ExtractFilePath(ParamStr(0)); //获得当前工程路径
InitFile();
InitBase();
Daw50Init();
EditInit();
for(int portX=0;portX<10;portX++)
{
Main->VehicData[portX].Speed=0;
Main->VehicData[portX].AxleNum=0;
Main->VehicData[portX].AxleGrNum=0;
Main->VehicData[portX].Weigh=0;
for(i=0;i<8;i++)
{
Main->VehicData[portX].Axle[i].AxleWeigh=0;
Main->VehicData[portX].Axle[i].AxleDis=0;
}
for(i=0;i<6;i++)
{
Main->VehicData[portX].AxleGr[0].Type=1;
Main->VehicData[portX].AxleGr[i].GrWeigh=0;
//Main->VehicData.AxleGr[i].OverWeigh=0;
}
}
Sleep(100);
PORTDATA pd,pd2,pd3,pd4,pd5,pd6;
pd.dt = Data;
pd.portN = port;
hReceive=CreateThread(0,0,ThreadReceive,(LPVOID *)&pd,0,&ThreadRec);//Data
Sleep(30);
//==============================================================================
pd2.dt = Data;
pd2.portN = port2;
hReceive2=CreateThread(0,0,ThreadReceive,(LPVOID *)&pd2,0,&ThreadRec);
Sleep(50);
pd3.dt = Data;
pd3.portN = port3;
hReceive3=CreateThread(0,0,ThreadReceive,(LPVOID *)&pd3,0,&ThreadRec);
Sleep(40);
pd4.dt = Data;
pd4.portN = port4;
hReceive4=CreateThread(0,0,ThreadReceive,(LPVOID *)&pd4,0,&ThreadRec);
pd5.dt = Data;
Sleep(20);
pd5.portN = port5;
hReceive5=CreateThread(0,0,ThreadReceive,(LPVOID *)&pd5,0,&ThreadRec);
Sleep(70);
pd6.dt = Data;
pd6.portN = port6;
hReceive6=CreateThread(0,0,ThreadReceive,(LPVOID *)&pd6,0,&ThreadRec);
//hReceive=CreateThread(0,0,ThreadReceive,Data3,0,&ThreadRec3);
//hReceive=CreateThread(0,0,ThreadReceive,Data4,0,&ThreadRec4);
//hReceive=CreateThread(0,0,ThreadReceive,Data5,0,&ThreadRec5);
//==============================================================================
UserMod->IBTDIS->Open();
UserMod->IBTDIS->Last();
Timer2->Enabled=true;
}