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