2010-03-15 107 views
1

我使用winmm.dll API方法waveOutGetPosition来获取WAV文件播放的当前位置。有时候,这种方式对我来说可以正常工作,但最终其中一个调用永远不会返回,并且我的应用程序会锁定。为什么要调用waveOutGetPosition挂起?

我发现这个帖子谁经历过同样的问题,一些用户:

http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/c6a1e80e-4a18-47e7-af11-56a89f638ad7

,但没有解决方案。有没有人遇到过这个问题?

更新:我能够创建可靠重现问题的样本应用程序:

Problem with waveOutWrite and waveOutGetPosition deadlock

仍然有不固定的,虽然。

+0

如果您可以重现此行为,我建议您联系Microsoft支持以提交错误并查看是否有可用的修复程序。 – 2010-03-16 14:18:25

+0

@Mattias:如果没有人能解决它,我会试试。 – MusiGenesis 2010-03-16 14:42:08

回答

0

解决方案是使用MessageWindow而不是回调 - MessageWindow允许waveOutGetPosition成功返回而不会发生死锁。

0

您可以将调用锁定在其自己的线程中,并在确定的时间后将其终止而不是让它挂起您的应用程序?不会真的解决问题,但它至少会让你继续。