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