3,882
社区成员




// main 函数
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
// Win Socket初始化
// ...
// 创建2000个线程
HANDLE ths[2000] = {0};
for(int i=0; i<2000; i++) {
HANDLE hTh = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc,
(LPVOID)(i+1), CREATE_SUSPENDED, NULL);
if(NULL == hTh) {
printf("Create thread failed(%d:%d)\n", i, GetLastError());
return -1;
}
ths[i] = hTh;
}
printf("Create thread success.\n");
// 启动创建好的线程
for(int i=0; i<2000; i++) {
ResumeThread(g_th[i]);
}
Sleep(5000);
return nRetCode;
}
// 线程函数
DWORD ThreadProc(LPVOID lpParameter)
{
char ch[100] = {0};
int i = (int)lpParameter;
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
if (INVALID_SOCKET == sockClient) {
printf("socket error(%d:%d)\n", i, WSAGetLastError());
return 1;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("localhost");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(80);
int err = connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if(SOCKET_ERROR == err) {
// 会出现10048、10061两种类型的错误
printf("connect error(%d:%d)\n", i, WSAGetLastError());
return 1;
}
sprintf(ch, "GET /app/?a=%d HTTP/1.1", i);
err = send(sockClient, ch, strlen(ch)+1, 0);
if(SOCKET_ERROR == err) {
printf("send error(%d:%d)\n", i, WSAGetLastError());
return 1;
}
closesocket(sockClient);
printf("proc ok(%d)\n", i);
return 0;
}