使用try catch块时,不会调用pthread清理函数

时间:2017-12-15 16:21:30

标签: c++

有人可以告诉我为什么没有为下面的代码调用清理函数。它总是在调用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上运行此代码

0 个答案:

没有答案