关于线程中调用select的有关问题
关于线程中调用select的问题
DWORD WINAPI netProc(LPVOID pParam)
{
int i = 0;
PArmTheadParam montp;
montp = (PArmTheadParam)pParam;
int res;
char recvBuf[100];
while (!b_stopFlag)
{
for(i = 0;i < montp-> GunNum ; i++)
{
fd_set fdRead;
timeval mWaitTime;
mWaitTime.tv_sec = 1;
mWaitTime.tv_usec = 0;
memset(recvBuf,0,100);
memset(Buf,0,250);
FD_ZERO(&fdRead);
FD_SET(montp-> s[i],&fdRead);
res = select((montp-> s[i])+1,&fdRead,NULL,NULL,&mWaitTime);
if(res > 0)
{
if(FD_ISSET(montp-> s[i],&fdRead))
{
recv(montp-> s[i],recvBuf,22,0);
GUNSTATE GunState;
memcpy(&GunState,recvBuf+17,5);
//如果任何一个模块有异常,则返回模块异常
if((GunState. mGS[0].MState== 0) || (GunState.mGS[1].MState == 0)|| (GunState.mGS[2].MState == 0) || (GunState.mGS[3].MState == 0))
{
// closesocket(montp-> s[i]);
// WSACleanup();
COPYDATASTRUCT cpd; /*给COPYDATASTRUCT结构赋值*/
cpd.dwData = GUN_MSTATE_ERROR;
cpd.cbData = 4;
cpd.lpData = (PVOID)&(montp-> beginAddr[i]);
SendMessage(montp-> recvHd,WM_COPYDATA,(WPARAM)(montp-> threadHd),(LPARAM)&cpd);//消息处理函数
}
if(recvBuf[10] == 0x01)
{
COPYDATASTRUCT cpd; /*给COPYDATASTRUCT结构赋值*/
cpd.dwData = GUN_GATE_CHANGED;
cpd.cbData = 4;
cpd.lpData = (PVOID)&(montp-> beginAddr[i]);
SendMessage(montp-> recvHd,WM_COPYDATA,(WPARAM)(montp-> threadHd),(LPARAM)&cpd);
}
if(recvBuf[10] == 0x02)
{
int j ,k;
for(j = 0 ;j < 4 ; j++)
{
for(k = 0 ; k < 6;k++)
{
// memcpy(Buf+30*j+5*k,&(montp-> beginAddr[i]),4);
Buf[30*j+5*k] = (char)((montp-> beginAddr[i]) & 0xff);
Buf[30*j+5*k+1] = (char)(((montp-> beginAddr[i])> > 8)& 0xff);
Buf[30*j+5*k+2] = (char)(((montp-> beginAddr[i])> > 16)& 0xff);
DWORD WINAPI netProc(LPVOID pParam)
{
int i = 0;
PArmTheadParam montp;
montp = (PArmTheadParam)pParam;
int res;
char recvBuf[100];
while (!b_stopFlag)
{
for(i = 0;i < montp-> GunNum ; i++)
{
fd_set fdRead;
timeval mWaitTime;
mWaitTime.tv_sec = 1;
mWaitTime.tv_usec = 0;
memset(recvBuf,0,100);
memset(Buf,0,250);
FD_ZERO(&fdRead);
FD_SET(montp-> s[i],&fdRead);
res = select((montp-> s[i])+1,&fdRead,NULL,NULL,&mWaitTime);
if(res > 0)
{
if(FD_ISSET(montp-> s[i],&fdRead))
{
recv(montp-> s[i],recvBuf,22,0);
GUNSTATE GunState;
memcpy(&GunState,recvBuf+17,5);
//如果任何一个模块有异常,则返回模块异常
if((GunState. mGS[0].MState== 0) || (GunState.mGS[1].MState == 0)|| (GunState.mGS[2].MState == 0) || (GunState.mGS[3].MState == 0))
{
// closesocket(montp-> s[i]);
// WSACleanup();
COPYDATASTRUCT cpd; /*给COPYDATASTRUCT结构赋值*/
cpd.dwData = GUN_MSTATE_ERROR;
cpd.cbData = 4;
cpd.lpData = (PVOID)&(montp-> beginAddr[i]);
SendMessage(montp-> recvHd,WM_COPYDATA,(WPARAM)(montp-> threadHd),(LPARAM)&cpd);//消息处理函数
}
if(recvBuf[10] == 0x01)
{
COPYDATASTRUCT cpd; /*给COPYDATASTRUCT结构赋值*/
cpd.dwData = GUN_GATE_CHANGED;
cpd.cbData = 4;
cpd.lpData = (PVOID)&(montp-> beginAddr[i]);
SendMessage(montp-> recvHd,WM_COPYDATA,(WPARAM)(montp-> threadHd),(LPARAM)&cpd);
}
if(recvBuf[10] == 0x02)
{
int j ,k;
for(j = 0 ;j < 4 ; j++)
{
for(k = 0 ; k < 6;k++)
{
// memcpy(Buf+30*j+5*k,&(montp-> beginAddr[i]),4);
Buf[30*j+5*k] = (char)((montp-> beginAddr[i]) & 0xff);
Buf[30*j+5*k+1] = (char)(((montp-> beginAddr[i])> > 8)& 0xff);
Buf[30*j+5*k+2] = (char)(((montp-> beginAddr[i])> > 16)& 0xff);