0
我目前正在研究一些C代碼,對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)
,但是這樣會殺死整個程序,而不僅僅是線程。
'pthread_exit'完成它應該做的事情:立即停止線程並且不在線程上執行任何其他操作。至於退出線程,最簡單的方法是完成線程功能。換句話說,你的'return 0'應該可以做到。您還需要在主線程中使用'pthread_join'或'pthread_detach'來完全擺脫線程。 – Arkadiy
@Arkadiy,現在這很明顯,可能是任何人在這裏問過的最愚蠢的問題。我認爲返回可能是這種情況,但我想嘗試顯式調用exit,因爲我已經對代碼進行了更改,似乎引入了內存泄漏,並認爲該線程可能與它有關。] – Boardy
內存泄漏的領域變得越來越廣泛,正是通過做這件事來做到這一點。即pthread_exit()是我真正希望不存在的那些函數之一。線程proc的乾淨運行始終需要努力,並且使得它更容易確保以代碼組織方式正確清理事件。 – WhozCraig