代码:pthrd_endof3.c
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
//方式1
void *tfn1(void *arg)
{
printf("thread 1 returning\n");
return (void*)111; //以return的方式终止该线程
}
//方式2
void *tfn2(void *arg)
{
printf("thread 2 exiting\n");
pthread_exit((void*)222); //以pthread_exit的方式终止该线程
}
//方式3
void *tfn3(void *arg)
{
while(1){
//printf("thread 3: I'm going to die in 3 seconds ...\n");
sleep(3);
//库函数
pthread_testcancel(); //自己添加取消点
}
return (void*)666;
}
int main()
{
pthread_t tid;
void *tret = NULL;
//创建线程1
pthread_create(&tid,NULL,tfn1,NULL);
//回收线程1
pthread_join(tid,(void**)&tret);
printf("thread 1 eixt code = %d\n\n",(int)tret); //thread 1 eixt code = 111
pthread_create(&tid,NULL,tfn2,NULL);
pthread_join(tid,(void**)&tret);
printf("thread 2 eixt code = %d\n\n",(int)tret); //thread 2 eixt code = 222
pthread_create(&tid,NULL,tfn3,NULL);
sleep(3);
pthread_cancel(tid); //取消线程
int ret = pthread_join(tid,(void**)&tret); //ret = 0
printf("ret = %d\n",ret);
printf("thread 3 eixt code = %d\n\n",(int)tret); //thread 3 eixt code = -1
return 0;
}
结果: