java 线程 全局变量_多线程是用全局变量,为什么线程只能执行一次?

1 #include

2 #include

3 #pragma comment(lib, "Ws2_32.lib")

4 #define AMOUNT 4

5 short m_port[AMOUNT] = {6000,6001,6002,6003};//端口号

6 char sendip[AMOUNT][16] =

7 {8 "127.0.0.1","127.0.0.1","127.0.0.1","127.0.0.1"

9 };10

11

12 int SIndex = 0,RIndex = 0;13 SOCKET sock[AMOUNT];14 BOOL UDPIni();15

16 DWORD WINAPI RecvProc(LPVOID lpParameter);17 DWORD WINAPI SendProc(LPVOID lpParameter);18

19 HANDLE hThreadRecv;20 HANDLE hThreadSend;21 HANDLE g_hEvent =CreateEvent(NULL,FALSE,FALSE,NULL);22

23 BOOL UDPIni()24 {25 WORD wVersionRequested;26 WSADATA wsaData;27 interr;28 wVersionRequested=MAKEWORD(2,2);29 err=WSAStartup(wVersionRequested,&wsaData);30 if(err != 0)31 {32 cout<

43 SOCKADDR_IN WaitFor_Addr[AMOUNT];44 int len = sizeof(SOCKADDR);45 for(int count = 0; count < AMOUNT; count++)46 {47 sock [count] = socket(AF_INET, SOCK_DGRAM, 0);48 if(INVALID_SOCKET ==sock[count])49 {50 cout<

55 WaitFor_Addr[count].sin_addr.S_un.S_addr =htonl(INADDR_ANY);56 WaitFor_Addr[count].sin_family =AF_INET;57 WaitFor_Addr[count].sin_port =htons(m_port[count]);58 int retvl=bind(sock[count],(SOCKADDR*)&WaitFor_Addr[count],len);59 if(SOCKET_ERROR ==retvl)60 {61 cout<

68 hThreadRecv=CreateThread(NULL,0,RecvProc,NULL,0,NULL);69 hThreadSend=CreateThread(NULL,0,SendProc,NULL,0,NULL);70 CloseHandle(hThreadRecv);71 CloseHandle(hThreadSend);72 returnTRUE;73 }74

75 char * Receive(intindex)76 {77 char recvBuf[1000] = "";78 SOCKADDR_IN addrConnect;79 int len = sizeof(SOCKADDR);80 int retvl = recvfrom(sock[index],recvBuf,sizeof(recvBuf) + 1,0,81 (SOCKADDR*)&addrConnect,&len);82 if(SOCKET_ERROR ==retvl)83 {84 cout<

92

93 BOOL Send(int index, char *m_msg)94 {95 intsendretvl;96 SOCKADDR_IN addrConnect;97 addrConnect.sin_addr.S_un.S_addr =inet_addr(sendip[index]);98 addrConnect.sin_family =AF_INET;99 addrConnect.sin_port =htons(m_port[index]);100 sendretvl = sendto(sock[index],m_msg,strlen(m_msg) + 1,0,101 (SOCKADDR*)&addrConnect,sizeof(SOCKADDR));102

103 if(SOCKET_ERROR ==sendretvl)104 {105 cout<

114

115 DWORD WINAPI RecvProc(LPVOID lpParameter)116 {117 while(TRUE)118 {119 char strtmp[1000] ="";120 WaitForSingleObject(g_hEvent,3000);121 strcpy(strtmp, Receive(RIndex));122 if(0 !=strlen(strtmp))123 {124 cout<=AMOUNT)127 RIndex =0;128 cout<

134 DWORD WINAPI SendProc(LPVOID lpParameter)135 {136 while(TRUE)137 {138 WaitForSingleObject(g_hEvent,3000);139

140 if(++SIndex >=AMOUNT)141 SIndex =0;142 cout<

148

149 voidmain()150 {151 UDPIni();152 while(1);153 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值