我目前正在编写一些 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)但这会杀死整个程序而不仅仅是线程。