解决Windows下使用wave系列函数时插拔时的死锁问题

本文探讨了在Windows平台使用waveAPI进行录音播放时遇到的设备插拔死锁问题。通过分析发现,回调函数在设备变动时易引发死锁。改用线程处理后,成功解决了设备插拔导致的程序崩溃。文章提供了具体代码示例及完整工程下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在windows平台下使用wave API进行录音播放时,设备插拔会导致程序死锁而崩溃;通过调试程序发现在程序运行过程中插拔设备后会阻塞在回调函数中的任何调用中,也即发生了死锁。所以得出结论是 采用回调用的方法,当你异常拔插设备的时候,很容易导致程序死锁。最后改用线程处理,设备插拔死锁的问题解决了。

下面是录音采集使用线程:

//开启音频采集
	MMRESULT mmReturn = ::waveInOpen( &m_hRecord, inAudioId/*WAVE_MAPPER*/,
		&m_WaveFormatEx, threadid, 0, CALLBACK_THREAD);

  下面是音频输出:

//打开音频输出设备
	mmReturn = ::waveOutOpen( &m_hPlay, OutAudioId/*WAVE_MAPPER*/,
		&m_WaveFormatEx, threadid, 0, CALLBACK_THREAD);

完整实现工程下载地址:https://download.youkuaiyun.com/download/qq_28581781/11845838

使用Qt Creator编译时,需要添加winmm.lib user32.lib

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值