问题点
1.录音过程中拔出设备,程序死锁
// 添加缓存的之前需要检查设备是否存在
case WIM_DATA:
if (is_device_exsit_) { // 设备是否存在,可以通过获取设备信息来判断
// 预处理
waveInPrepareHeader(hWaveIn, phdr, sizeof WAVEHDR);
// 添加缓存
waveInAddBuffer(hWaveIn, phdr, sizeof(WAVEHDR));
}
- 注意: 在设备拔出的时候,回调函数里面检查设备信息,仍然能够得到设备信息。此时,添加buffer,程序死锁:
- 那么,就不能在同一个线程内去查询设备是否已经拔出了,因此,在open device的时候,改变数据获取方式,改用 CALLBACK_THREAD 的方式
waveInOpen(&wave_in_,device_id_, &wave_formate_, (DWORD)thread_id, DWORD(this), CALLBACK_THREAD);