质疑<<Windows程序设计>>中waveInUnprepareHeader的使用
<<Windows程序设计>>第22章的Record1程序(第5版1220页)
一个录音机程序,他在MM_WIM_CLOSE中调用waveInUnprepareHeader,然后free录音缓冲区.
我单步到此处,waveInUnprepareHeader从来没成功过,总是返回MMSYSERR_INVALHANDLE,因为此时设备已经关闭,句柄无效了.
我还有几个疑问:
1.MSDN说waveInUnprepareHeader函数清除由waveInPrepareHeader做的准备.waveInPrepareHeader做了什么准备?
我听有人说,waveInPrepareHeader使缓冲区所在的页面锁定到物理内存中,防止分页到硬盘上.是这样吗?
2.MSDN还说你必须在设备把一个缓冲区填满并返回给程序时调用waveInUnprepareHeader.
真的有必要吗?我只要从缓冲区中提取一些数据就继续AddBuffer了,需要按Unprepare/分析数据/Prepare/AddBuffer这个顺序调用吗?省去Unprepare/Prepare可以吗?
3.MSDN又说了,你必须在free缓冲区之前调用waveInUnprepareHeader.但是据我观察,Record1调用waveInUnprepareHeader失败,并不影响后面的free.这是偶然还是必然?
4.MM_WIM_CLOSE消息提供了hInputDev在wParam里.此时设备已关闭,句柄还有什么用?
5.我的程序在waveInReset中设置一个缓冲区计数,缓冲区返回时waveInUnprepareHeader,计数减一,减到0就waveInClose.这样做waveInUnprepareHeader都能成功.但是当我把所有的waveInUnprepareHeader全部删除,程序表现一切正常,内存泄漏也没有,这样做有什么隐患吗?
问题有点难,解决了给200分,没解决就散100.
没法归类了,勉强跟线程扯上点关系,就发在这个版吧.
[解决办法]
来听教。。。。。。
[解决办法]
很久以前我做过声音压缩用到过这些,那是也研究了好久,虽然最后做出来了,可从来没lz想的细致,现在程序也找不见了,只好帮顶
[解决办法]
顶,你这个有点偏。很少人做的
[解决办法]
LZ应该发到硬件板块去,问题比较深,没考虑过