我在做一个网络聊天的客户端.在接收到网络上的包然后播放时,发现在waveoutwrite这个函数会运行一段时间后不返回.死在里面了.我当时打开播放设备的时候用的是CALLBACK_FUNCTION.现在改为CALLBACK_THREAD,这个问题解决了.但是也还是不知道为什么.
现在出现了一个新问题,现在播放是没有问题了.但是录音的时候我也用的是CALLBACK_THREAD.waveInOpen(&hWaveIn, WAVE_MAPPER, &waveFormatEx, m_dwAudioInId,0,CALLBACK_THREAD);BOOL CAudioPlay::StartInThread()
{
hAudioIn=CreateThread(0,0,AudioInThreadProc,this,0,&m_dwAudioInId);
if(!hAudioIn)
{
TRACE("CWaveOut::StartThread: Strat wave in thread fail.\n");
return FALSE;
}
return TRUE;
}DWORD WINAPI AudioInThreadProc(LPVOID lpParameter)
{
log("AudioInThreadProc start.\n");//输出日志 MSG msg;
         
while(GetMessage(&msg,0,0,0))
{
                  log("while start");//输出日志
switch(msg.message )
{
case MM_WIM_OPEN:
TRACE("MM_WIM_OPEN \n");
break;
case MM_WIM_CLOSE:
TRACE("MM_WIM_CLOSE \n");
break;
case MM_WIM_DATA:
WAVEHDR* pWH=(WAVEHDR*)msg.lParam;
waveInUnprepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
log("data");//用来记录日志.
if(pWH->dwBytesRecorded<320)
break;
memcpy(Buffer[In_cur],pWH->lpData,pWH->dwBytesRecorded);
In_cur = ( In_cur +1 ) % MAXINBUFFER; waveInPrepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
waveInAddBuffer((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
EnterCriticalSection(&waveInCriticalSection);
In_size++;
LeaveCriticalSection(&waveInCriticalSection);
break;
}
Sleep(1);
} TRACE("AudioInThreadProc exit.\n");
return msg.wParam;
}当程序在windows2000 profetinal下运行时没问题,但是在XP下运行时,播放部分没问题.但是录音的线程只有AudioInThreadProc start输出,然后就没有了.怎么回事?有谁可以告诉我?