现在的位置: 首页 > 综合 > 正文

4444444444

2012年11月16日 ⁄ 综合 ⁄ 共 2106字 ⁄ 字号 评论关闭
int main()  
{  
    //初始化  
    ReadInitConfig("config.xml");  
  
    CURLcode res; //定义CURLcode类型的变量  
    pthread_t threads[10000];//PID
    int i, ret;  
    struct HttpGetParam httpGetParams[10000];  
    pthread_attr_t thread_attr;
    size_t stack_size;

	
	QueryPerformanceFrequency(&m_nFreq); // 获取CPU时钟周期

    m_PacketUseTime.clear();  
	
    res = curl_global_init(CURL_GLOBAL_ALL);  
    if (res != CURLE_OK)  
    {  
        printf( "Failed to global init default [%d]\n", res );  
        return 1;  
    }   
      
    memset(threads, 0, sizeof(threads));  
    memset(httpGetParams, 0, sizeof(httpGetParams));  
      
    for ( i = 0; i < configvalues.MaxThread; i++)  
    {  
        //目标URL  
        //httpGetParams[i].url = "http://127.0.0.1";  
        httpGetParams[i].url = configvalues.DefaultUrl;  
    }  

    pthread_mutex_init(&mutex, NULL);        //初始化线程锁  
  
    //printf("PTHREAD_STACK_MIN=%d\r\n", PTHREAD_STACK_MIN);    
  
    pthread_attr_init(&thread_attr);  
    pthread_attr_getstacksize(&thread_attr, &stack_size);  
      
    //printf("Default stack size is %u; minimum is %u\n", stack_size, PTHREAD_STACK_MIN);
  
    //设置线程栈大小,这里设置成了1M,这个可能需要根据情况调,最小不能小于PTHREAD_STACK_MIN,如果太小有可能出现栈溢出  
    pthread_attr_setstacksize(&thread_attr, 2*1024 * 1024);  
    pthread_attr_getstacksize(&thread_attr, &stack_size);    
      
    //printf("New stack size is %u; minimum is %u\n", stack_size, PTHREAD_STACK_MIN);  

    for ( i = 0; i < configvalues.MaxThread; i++)  
    {  
        //创建线程,threads线程ID   
        ret = pthread_create(&threads[i], &thread_attr, http_get, (void *)&httpGetParams[i]);  
		if (0 != ret)  
        {  
            perror("pthread_create failed!!! The reason is:");    
        }
		Sleep(1);
    }

	gets(Putkey);

	if(!strcmp(Putkey, "q"))
	{
		pthread_attr_destroy(&thread_attr);    

		Sleep(2000);
		//等待退出  
		for ( i = 0; i <configvalues.MaxThread ; i++)  
		{  
			if (threads[i].p != 0)  
			{  
				pthread_cancel(threads[i]);  
				pthread_join(threads[i], NULL);  
				//pthread_mutex_unlock(&mutex[i]);            //解锁  
			}  
		}

		pthread_mutex_destroy(&mutex);  
  
		printf("SendPaket ------- %d\r\n", configvalues.MaxThread * configvalues.SendCount);  
		printf("Success --------- %d\r\n", SucceNum);  
		if(!m_PacketUseTime.empty())  
		{  
			printf("MaxUesTime ------ %f\r\n", *max_element(m_PacketUseTime.begin(), m_PacketUseTime.end()));  
			printf("MinUesTime ------ %f\r\n", *min_element(m_PacketUseTime.begin(), m_PacketUseTime.end()));  
			printf("AverageTime ----- %f\r\n", accumulate(m_PacketUseTime.begin(), m_PacketUseTime.end(), 0)/(double)m_PacketUseTime.size());  
		}  
		else  
		{  
			printf("there is not have any data for time log!!\r\n");   
		}
	}
	system("pause");
    return 0;  
}  

 

抱歉!评论已关闭.