在退出的时候,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;
}