当前位置: 技术问答>linux和unix
pthread_cancel线程退出问题 while(1)这种循环如何退出?急!急 !
来源: 互联网 发布时间:2016-03-19
本文导语: 本人有一线程函数 并包了如下代码 其他处理代码没有贴出。 while(1) { ..... } 如果使用pthread_cancel结束线程 并等待线程结束pthread_join 会一直阻塞 线程无法终止 难道只用标志位来作?请指点 | ...
本人有一线程函数
并包了如下代码 其他处理代码没有贴出。
while(1)
{
.....
}
如果使用pthread_cancel结束线程
并等待线程结束pthread_join 会一直阻塞 线程无法终止 难道只用标志位来作?请指点
并包了如下代码 其他处理代码没有贴出。
while(1)
{
.....
}
如果使用pthread_cancel结束线程
并等待线程结束pthread_join 会一直阻塞 线程无法终止 难道只用标志位来作?请指点
|
和while里面的函数有关。
有些函数会检查pthread_cancel,有些函数不会。
请查联机帮助。
有些函数会检查pthread_cancel,有些函数不会。
请查联机帮助。
|
抱歉,想当然了。
下面是我新查到的内容。
#include
int pthread_setcancelstate(int state, int *oldstate);
int pthread_setcanceltype(int type, int *oldtype);
void pthread_testcancel(void);
The pthread_setcancelstate() function shall atomically both set the calling
thread's cancelability state to the indicated state and return the previous
cancelability state at the location referenced by oldstate. Legal values
for state are PTHREAD_CANCEL_ENABLE and PTHREAD_CANCEL_DISABLE.
The pthread_setcanceltype() function shall atomically both set the calling
thread's cancelability type to the indicated type and return the previous
cancelability type at the location referenced by oldtype. Legal values for
type are PTHREAD_CANCEL_DEFERRED and PTHREAD_CANCEL_ASYNCHRONOUS.
|
调用pthread_cancel去取消线程的话,该线程必须有取消点。
|
先用man pthread_cancel看看这个函数到底做了什么事情,如何影响的线程,然后再使用它,不要看着函数名想当然的来使用。这种学习态度要贯穿所有系统函数的学习,尽管有些函数已经非常简单
|
//设置线程属性
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);//线程可以被取消掉
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);//立即退出
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);//线程可以被取消掉
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);//立即退出