退出c中的一个主题

时间:2012-09-28 15:45:45

标签: c linux pthreads

我目前正在研究一些C代码,对C来说很新,所以如果这是一个基本或愚蠢的问题,请道歉。

我有以下代码,它使用pthread_create()在一个线程中执行。

if (ps.status == completed)
        {
            LOG(LOG_AUDIO, "evsafewait_sm_play_tone:\tPlay tone complete");
            if (e2)
            {
                LOG(LOG_MUST, "Failed to free tone event. Result: %i", e2);
            }

            pccb->playToneComplete = 1;
            LOG(LOG_AUDIO, "Detatching thread ID %x", manageToneParms->toneManagerThread);
            //pthread_detach(manageToneParms->toneManagerThread);

            int retVal;
            pthread_exit(&retVal);
            LOG(LOG_AUDIO, "THREAD TERMINATED WITH RESULT %i", retVal);
            LOG(LOG_AUDIO, "Freeing memory");

            free(manageToneParms->playToneParms);
            free(manageToneParms);
            return 0;
        }  

在结构空闲并且方法返回之前,我试图使用pthread_exit()退出线程但是当调用它时,跳过它下面的所有内容,没有错误显示,无论如何我都能看到。

我尝试用GDB调试它,当pthread_exit()被调用时,它输出的下一个东西是siglongjmp,我不知道这是什么,我不相信它在C代码中,至少不是我所做的改变。

如何退出此帖子?我也试过了pthread_exit(NULL)pthread_kill(threadID, SIGKILL)但是这会杀死整个程序而不仅仅是线程。

1 个答案:

答案 0 :(得分:1)

pthread_exit()在通话时从线程返回。 pthread_exit()之后的任何代码都不会被执行。

在调用pthread_exit()之前,您应确保释放线程中分配的所有内存。

你有没有试过这样的事情:?

int retVal;

/* free resources -- make sure all resources allocated in thread 
   function are released 
*/
free(manageToneParms->playToneParms);
free(manageToneParms);

LOG(LOG_AUDIO, "THREAD TERMINATED WITH RESULT %i", retVal);
LOG(LOG_AUDIO, "Freeing memory");
pthread_exit(&retVal);