情况大致是这样的:现在进行HTTP请求(GET),然后进行接收,我是一个线程对应一个请求,即一个线程负责发送请求,然后进行接收,除HTTP头部的部分,写入到文件中。我的代码结构是这样的:
while(i<infohash_num)
{
pthread_t tid;
int rc=0;
if((rc=pthread_create(&tid,NULL,process_http,a[i]))!=0);
{
fprintf(stderr,"pthread_create failed!!!!!\n");
exit(0);
}
else
{
printf("创建线程 %d 成功,请求的 infohash 为:%s!!!\n",i,a[i]);
i++;
}
//sleep(5);
}
但是,我面临着一个问题,主程序如果提前结束了,那么线程也就结束了,我该怎么处理呢??让所有线程结束之后,主程序再结束,我知道有个函数pthread_join(),该函数可以等待一个线程结束。我的想法是:把建立的套接字的描述符放到一个数组里,当while循环结束之后,轮询套接字描述符数组id[](for循环),循环体为pthread_join()。。不知道这种方法行不行?但是,我还有个疑问:就是,当我轮询一个套接字描述符时,其他的线程结束了,这样对于这个有没有影响呢??也就是说,假如正在pthread_join(id[0],*)时候,描述符id[10]对应的线程结束了,这样会不会有什么影响呢??