posix的线程有两中取消模式,立即取消和延迟取消.
立即取消是你调用pthread_cancel的时候,不管线程当前正在干什么,马上被结束掉.
延迟取消是在你调用pthread_cancel以后,线程运行到一个取消点函数的时候才会结束.
使用pthread_join函数挂起当前线程后,想取消挂起,因此试着用了 pthread_detach函数,必须把pthread_join放在pthread_join前面.
如果没有设置detach就要join, 否则线程的一些资源不会释放。
立即取消:
在线程函数里增加这样两条语句
//收到cancel信号后设为cancle态
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
//收到cancel信号后立即退出
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
或增加取消点
pthread_testcancle();
阅读(497) | 评论(0) | 转发(0) |