hur.cn - 华软网

 热门搜索

waveOut回调函数

  作者:未知    来源:网络    更新时间:2011/9/28
waveOut中的回调函数应该怎样写才不会死锁呢?在网上看了一大堆,不是很明白~
---华软 网友回答---
不要在回调函数里,做耗时太久的事
典型应用是,把数据push到一个buffer里
---华软网友回复---
不懂。可以明白点不?
---华软网友回复---
在捕捉到声音后,会调用回调函数,此时需要把数据存入到文件或发送到网络上,但时间往往不能保证
因此,可以把数据push到一个list里,然后另起线程来处理数据
---华软网友回复---
额。。太笨了我。听不懂。好多不会。
我已经把我的文件上传到这里了http://download.csdn.net/detail/zq282502532/3643645,来个高手帮帮忙吧。
---华软网友回复---
赐给我一个神来救救我吧~~感谢上苍啊~
---华软网友回复---
为嘛现在发帖回的人啧少呢?
---华软网友回复---
你还不如把回掉函数代码贴出来,如果你确定是这里出问题了。
---华软网友回复---
C++">
void CALLBACK CWavePlay::WaveCallback(HWAVEOUT hWave, UINT uMsg, DWORD dwUser,DWORD dw1, DWORD dw2)
{//this is a static callback function

CWavePlay *pWavePlay = (CWavePlay *)dwUser;

if(uMsg == WOM_DONE)
{
LPWAVEHDR pWaveHeader = (LPWAVEHDR)dw1;

waveOutUnprepareHeader( hWave, pWaveHeader, sizeof(WAVEHDR) );

UINT32 nReadSize = pWavePlay->LoadData(BUFFER_SIZE,pWavePlay->m_szBufData[pWavePlay->m_nCurIndex]);
pWaveHeader->lpData = (LPSTR)(pWavePlay->m_szBufData[pWavePlay->m_nCurIndex]);
pWaveHeader->dwBufferLength = nReadSize;

if (nReadSize <= 0)
{
waveOutReset(hWave);
waveOutClose(hWave);
hWave = NULL;
return;
}

waveOutPrepareHeader( hWave, pWaveHeader, sizeof(WAVEHDR));
waveOutWrite( hWave, pWaveHeader, sizeof(WAVEHDR) );

pWavePlay->m_nCurIndex ++;
pWavePlay->m_nCurIndex %= BUFFER_NUM;
}

}

好吧,贴出来。回帖的人真少~~查了下有说另开线程,可是怎么写呢?
---华软网友回复---
C++">void CALLBACK CWavePlay::WaveCallback(HWAVEOUT hWave, UINT uMsg, DWORD dwUser,DWORD dw1, DWORD dw2)
{//this is a static callback function

CWavePlay *pWavePlay = (CWavePlay *)dwUser;

if(uMsg == WOM_DONE)
{
LPWAVEHDR pWaveHeader = (LPWAVEHDR)dw1;

waveOutUnprepareHeader( hWave, pWaveHeader, sizeof(WAVEHDR) );

UINT32 nReadSize = pWavePlay->LoadData(BUFFER_SIZE,pWavePlay->m_szBufData[pWavePlay->m_nCurIndex]);
pWaveHeader->lpData = (LPSTR)(pWavePlay->m_szBufData[pWavePlay->m_nCurIndex]);
pWaveHeader->dwBufferLength = nReadSize;

if (nReadSize <= 0)
{
waveOutReset(hWave);
waveOutClose(hWave);
hWave = NULL;
return;
}

waveOutPrepareHeader( hWave, pWaveHeader, sizeof(WAVEHDR));
waveOutWrite( hWave, pWaveHeader, sizeof(WAVEHDR) );

pWavePlay->m_nCurIndex ++;
pWavePlay->m_nCurIndex %= BUFFER_NUM;
}

}

查了一些,有说是另开线程,可是线程怎么写呢?
---华软网友回复---
回调函数里面 不要做太复杂操作 不会导致毁掉线程卡死的
你可以用PostMessage 发送给窗体 进入窗体消息队列 让回调线程马上返回      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。