思路
防止线程还没有处理完主进程就退出因此要使用
在线程中
static char *p = "t1 run out";
pthread_exit((void *)p);
在主函数中
char *pret = NULL;
pthread_join(t1,(void *)&pret);
主进程运行到pthread_join时会等待线程的pthread_exit返回才会继续进行主进程的运行
有数据传输的时候的做法 如果没数据传输的话可以去掉
static char *p = "t1 run out";
删除
pthread_join(t1,(void *)&pret);
pthread_exit((void *)p);
改为
pthread_join(t1,NULL);
pthread_exit(NULL);
代码演示
#include<stdio.h>
#include<pthread.h>
void *fun1(void *arg){
static char *p = "t1 run out";//必须使用static才可全局访问,不然会随这fun1的退出而将其内存清除
printf("t1: %ld thread\n",(unsigned long)pthread_self());//将其id输出
printf("param : %d\n",*((int *)arg));
pthread_exit((void *)p);
}
int main(){
int ret;
int param = 100;
pthread_t t1;
char *pret = NULL;
ret = pthread_create(&t1,NULL,fun1,(void *)¶m);//创建线程
printf("main: %ld thread\n",(unsigned long)pthread_self());
pthread_join(t1,(void *)&pret);
printf("main t1 quit return %s\n",pret);
return 0;
}