在退出的时候,C++抛出异常:
terminate called after throwing an instance of 'std::system_error'
what(): Invalid argument
后来查到是因为std::thread被join了两次,一次是手动调用stop,一次是析构时调用:
析构时调用,我主要是考虑到有的用户在使用时没有主动停止线程,就直接退出了。
int AudioRecImpl::stop()
{
int ret = 0;
if (mAudioCapThreadState == AUDIO_CAP_STATE_STARTED)
{
mAudioCapThreadState = AUDIO_CAP_STATE_PAUSED;
}
mAudRecThread->join();
return ret;
}
因此在线程退出时添加判断作为常规操作是必要的:
int AudioRecImpl::stop()
{
int ret = 0;
if (mAudioCapThreadState == AUDIO_CAP_STATE_STARTED)
{
mAudioCapThreadState = AUDIO_CAP_STATE_PAUSED;
}
if(nullptr != mAudRecThread)
{
mAudRecThread->join();
delete mAudRecThread;
mAudRecThread = nullptr;
}
return ret;
}

本文解析了C++中由于std::thread被两次join导致的std::system_error异常,详细介绍了错误发生的原因及解决方案。通过检查线程状态并在析构前安全地join线程,避免了异常抛出。
1792

被折叠的 条评论
为什么被折叠?



