有人可以告诉我为什么没有为下面的代码调用清理函数。它总是在调用pthread_cancel函数时生成异常,这是我没想到的。这是我在下面的示例代码
void threadCleaner(void* t)
{
printf("%s\n",__func__);
}
void* thread(void* t)
{
pthread_cleanup_push(threadCleaner,NULL);
while(true)
{
try
{
pthread_test_cancel();
//recvfrom socket function
...
}
catch(...)
{
printf("exception in %s\n",__func__);
}
}
pthread_cleanup_pop(1);
return NULL;
}
int main(int argc,char* argv[])
{
pthread_t t;
pthread_create(&t,NULL,thread,NULL);
while(true)
{
char a[10];
fgets(a,sizeof(a),stdin);
if(strncasecmp(a,"exit",4)==0)
break;
}
pthread_cancel(t);
pthread_join(t,NULL);
return 0;
}
我在gcc编译器4.1.2上运行此代码