SDL_CloseAudio()在Windows中挂起

时间:2012-07-26 03:54:02

标签: audio sdl

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

在调用SDL_OpenAudio()之前,应该有一个必须挂钩到SDL的回调,这就麻烦了。

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

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

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

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

0 个答案:

没有答案