multi thread

DWORD WINAPI PThread(LPVOID a);


DWORD WINAPI tx_PThread(LPVOID a);


int main(int argc, char* argv[])
{
DWORD tx_ThreadId;


int i=0;


HANDLE hThread=CreateThread(NULL,NULL,tx_PThread,LPVOID(i),0,&tx_ThreadId);


for(;;);


return 0;
}






DWORD WINAPI tx_PThread(LPVOID a)
{
WSADATA wsaData;
    WORD sockVersion = MAKEWORD(2, 2);


//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;


while(1)
{
//osd_data_set(value_cnt++);
//lz_tmp_start
ScanfData[1][22*16]  = '0'+value_cnt/100000000%10;
ScanfData[1][22*16+1] = '0'+value_cnt/10000000%10;
ScanfData[1][22*16+2] = '0'+value_cnt/1000000%10;
ScanfData[1][22*16+3] = '0'+value_cnt/100000%10;
ScanfData[1][22*16+4] = '0'+value_cnt/10000%10;
ScanfData[1][22*16+5] = '0'+value_cnt/1000%10;
ScanfData[1][22*16+6] = '0'+value_cnt/100%10;
ScanfData[1][22*16+7] = '0'+value_cnt/10%10;
ScanfData[1][22*16+8] = '0'+value_cnt%10;


value_cnt++;
//lz_tmp_end


Sleep(1000);


for(int send_num=0; send_num<CNT; send_num++)
{
if(value_cnt>1 && data_back_flag==1)
{
send_num=1;
}


//if(value_cnt==1 && send_num==0)
if(!data_back_flag)
{
// 创建套节字
printf("init socket\n");

closesocket(sClient);


int nNetTimeout=1000;//1秒,


sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
printf("socket error\n");
data_back_flag = 0;
break;
//return 0;
}


setsockopt(sClient, SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout,sizeof(int));


// 在sockaddr_in结构中装入服务器端地址信息
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(1400);
servAddr.sin_addr.S_un.S_addr =inet_addr("192.168.1.209");//服务器端ip


//连接服务器端
if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
{
printf("connect error\n");
closesocket(sClient);
data_back_flag = 0;
break;
//return 0;
}
}


DWORD ThreadId;


int i=0;
data_rev_flag=0;
HANDLE hThread=CreateThread(NULL,NULL,PThread,LPVOID(i),0,&ThreadId);


send(sClient,ScanfData[send_num],data_len[send_num],0);


//WaitForSingleObject(hThread,INFINITE);
int time_out=0;
do
{
Sleep(500);
}while(time_out++<10 && data_rev_flag==0);


if(time_out>=10)
{
TerminateThread(hThread,0);
data_back_flag = 0;

printf("ERROR! TerminateThread(hThread,0)!\n");
}
}


}


closesocket(sClient);


WSACleanup();


return 0;
}




DWORD WINAPI PThread(LPVOID a)
{
int i;


while(TRUE)
{
int ret=recv(sClient,RevData,255,0);


if(ret>0)
{
//RevData[ret]=0x00;
printf("Receive(%d):\n", value_cnt-1);


for(i=0; i<ret; i++)
{
printf("%02x ",(unsigned char )RevData[i]);
}


printf("\n");


//检测数据回桢




if((unsigned char)RevData[0]==0xb0 && (unsigned char)RevData[3]==0x58)
{
if((unsigned char)RevData[9]==0x08 && (unsigned char)RevData[10]==0x01 )
{
data_back_flag = 1;
}
else if((unsigned char)RevData[9]==0x04 && (unsigned char)RevData[10]==0x01)
{
data_back_flag = 0;
printf("ERROR! PThread->data_back_flag ERROR1!\n");
}
else
{
printf("ERROR! PThread->data_back_flag ERROR2!\n");
}
}


break;


}
}


data_rev_flag = 1;


return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值