SDL_CloseAudio()
SDL を使用すると、オーディオ/ビデオを継続的に再生する必要があるため、オーディオ/ビデオの再生後にオーディオ スレッドを閉じるために呼び出す必要があるか、連続するオーディオ/ビデオを再生するときに を使用するSDL_OpenAudio()
と、エラーが発生します。最後の再生がデバイスを閉じていないためです。
call の前に SDL にフックしなければならないコールバックがあるはずでSDL_OpenAudio()
、問題が発生します。
SDL internal によって直接作成されたオーディオ スレッドにアクセスできないことに気付きました (実際にスレッドが作成されています)。音声を閉じる唯一の方法はです。SDL_CloseAudio()
それを呼び出す前に、最初に呼び出したほうがよいでしょうSDL_LockAudio()
。オーディオ コールバックがそのSDL_LockAudio()
内部スレッドによって呼び出されていないことを確認してから、安全な呼び出しポイントにしますSDL_CloseAudio
。
フラグを使用することで、コールバックが SDL 内部オーディオ スレッドによって呼び出されていないことを確認できます。次に、 を呼び出してオーディオをロックしようとしSDL_LockAudio()
ます。これは完全に安全だと思います。 、まだSDL_CloseAudio()
呼び出しを中断します。
を変更してみましたSDL_CloseAudio()
。SDL ソース コードでは、オーディオ モジュールはシングルトンであり、そのオーディオ スレッド (インスタンスSDL_Thread
) にアクセスできSDL_KillThread()
ます。力は他の問題を引き起こします。
私の質問は、ロック操作が成功したのに、クローズ操作がまだ中断されているのはなぜですか?