Я использую winmm.dll метод API waveOutGetPosition, чтобы получить текущую позицию воспроизведения файла WAV. Иногда это работает, как и ожидалось, но в итоге один из вызовов не возвращается, и мое приложение блокируется.
winmm.dll
waveOutGetPosition
Я нашел эту тему с несколькими пользователями, которые столкнулись с такой же проблемой:
http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/c6a1e80e-4a18-47e7-af11-56a89f638ad7
но нет решения. Кто-нибудь сталкивался с этой проблемой раньше?
Обновление : мне удалось создать пример приложения, которое надежно воспроизводит проблему:
Проблема с тупиками waveOutWrite и waveOutGetPosition
Тем не менее, это еще не исправлено.
Решение состоит в том, чтобы использовать MessageWindow вместо обратного вызова - MessageWindow позволяет waveOutGetPosition успешно возвращаться без блокировки.
Можете ли вы заблокировать вызов в своем собственном потоке и завершить его через определенное время вместо того, чтобы позволить ему повесить ваше приложение? На самом деле это не решит проблему, но, по крайней мере, позволит вам продолжить.