私は現在、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)
が、これはスレッドだけでなくプログラム全体を殺します。