4444444444
来源:互联网 发布:淘宝公益宝贝标志 编辑:程序博客网 时间:2024/05/17 07:58
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; }