#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
//只有在while中的PTHREAD_CANCEL_ENABLE和PTHREAD_CANCEL_DISABLE之间收到cancel后线程才退出
void *thread_run(void *p)
{
int old_state;
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_state);//收到cancel后线程不取消
while (1)
{
printf("\033[32m[%s:%d]\033[36m \033[0m\n", __FUNCTION__, __LINE__);
sleep(1);
printf("\033[32m[%s:%d]\033[36m \033[0m\n", __FUNCTION__, __LINE__);
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old_state);//收到cancle后线程退出
pthread_testcancel();//设置取消点
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_state);//收到cancel后线程不取消
printf("\033[32m[%s:%d]\033[36m \033[0m\n", __FUNCTION__, __LINE__);
}
}
int main(int argc, char *argv[])
{
pthread_t t_id;
pthread_create(&t_id, NULL, thread_run, NULL);
sleep(4);
printf("\033[32m[%s:%d]\033[36m \033[0m\n", __FUNCTION__, __LINE__);
pthread_cancel(t_id);//发送取消线程的消息
printf("\033[32m[%s:%d]\033[36m \033[0m\n", __FUNCTION__, __LINE__);
pthread_join(t_id, NULL);//等待线程退出
printf("\033[32m[%s:%d]\033[36m \033[0m\n", __FUNCTION__, __LINE__);
return 0;
}
线程退出
最新推荐文章于 2024-03-22 23:44:26 发布