0

通过使用SDL,我需要连续播放音频/视频,因此,在播放音频/视频后,我必须调用SDL_CloseAudio()关闭音频线程,或者在播放连续的音频/视频时,使用SDL_OpenAudio(),我会得到错误,因为上次播放还没有关闭设备。

应该有一个回调,你必须在 call 之前挂钩到 SDL SDL_OpenAudio(),然后麻烦就来了。

我注意到您无法访问由 SDL 内部直接创建的音频线程(它确实创建了线程)。关闭音频的唯一方法是SDL_CloseAudio(),在调用它之前,您最好先调用它SDL_LockAudio()SDL_LockAudio()确保音频回调未被其内部线程调用,然后是调用的安全点SDL_CloseAudio

通过使用一个标志,我们可以确保回调没有被 SDL 内部音频线程调用,然后我们尝试通过调用来锁定音频SDL_LockAudio(),我认为这是非常安全的,有时它确实运行良好,但其他时候,仍然暂停SDL_CloseAudio()通话。

我试图改变SDL_CloseAudio(). 在 SDL 源代码中,音频模块是一个单例,我们可以访问它的音频线程(是一个SDL_Thread实例),通过使用SDL_KillThread(),我们可以终止音频线程,这确实是完全安全的,但我不确定这样的暴力力会导致任何其他问题。

我的问题是为什么锁操作成功,但关闭操作仍然挂起?

4

0 回答 0