0

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()ます。は他の問題を引き起こします。

私の質問は、ロック操作が成功したのに、クローズ操作がまだ中断されているのはなぜですか?

4

0 に答える 0