天天看點

std::system_error

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

繼續閱讀