waveIn系関数を用いた録音機能の実装
waveInReset から制御が戻らず,アプリケーションがフリーズ.原因は deadlock のようだ.具体的には,waveInReset を呼んだ時点でバッファ内にはデータが残っているため MM_WIM_DATA イベントと共に callback 関数へと処理が移されて,waveInAddBuffer でデッドロックする.この問題に対しては,録音状態を示すフラグ m_Recoding を導入して
m_Recording = false
waveInReset()
一方,callback 関数の方は
if uMsg=MM_WIM_DATA and m_Recording then
waveInAddBuffer()
end if
とすることで解決する.