子线程的代码如下:
while( done<= end3)
{
len = fread(buf, sizeof(char), 10000, pFileRead);
if(len <= 0)
break; ret = decodeMP3(&mp,buf,len,out,8192,&size);
if(firstbuf)
{
aufile->samplerate = freqs[mp.fr.sampling_frequency];
firstbuf = FALSE;
}
while(ret == MP3_OK)
{
samplesperframe = size/bytespersample;
write_audio_file(aufile, out, samplesperframe, 0); ret = decodeMP3(&mp,NULL,0,out,8192,&size);
}
done+=len;
int t=100 * done/(end3);
::SendMessage(m_hwnde,WM_EB200WAVE,KaProOK,(long)t);
::EnterCriticalSection(&m_css);
m_lbreak=m_break;
::LeaveCriticalSection(&m_css);
if(m_lbreak)
break;
} 主线程的代码如下:
BOOL CPipe::StopThread()
{
if (tran)
{
::EnterCriticalSection(&m_css);
m_break=TRUE;
::LeaveCriticalSection(&m_css);
if (tran)
{
WaitForSingleObject(tran,INFINITE);
}
CloseHandle(tran);
tran=0;
return TRUE;
}
DeleteCriticalSection(&m_css);
return FALSE;
} 主线程通过改变变量m_break的值,通知子线程退出循环,并且WaitForSingleObject(tran,INFINITE)等待循环退出!
此时出现的问题是,为什么这个,变量值改变了,然而子线程的这个变量值没有改变,依然没有退出循环,因此主线程一直WaitForSingleObject(tran,INFINITE)等待,得不到通知?请高手帮忙!
while( done<= end3)
{
len = fread(buf, sizeof(char), 10000, pFileRead);
if(len <= 0)
break; ret = decodeMP3(&mp,buf,len,out,8192,&size);
if(firstbuf)
{
aufile->samplerate = freqs[mp.fr.sampling_frequency];
firstbuf = FALSE;
}
while(ret == MP3_OK)
{
samplesperframe = size/bytespersample;
write_audio_file(aufile, out, samplesperframe, 0); ret = decodeMP3(&mp,NULL,0,out,8192,&size);
}
done+=len;
int t=100 * done/(end3);
::SendMessage(m_hwnde,WM_EB200WAVE,KaProOK,(long)t);
::EnterCriticalSection(&m_css);
m_lbreak=m_break;
::LeaveCriticalSection(&m_css);
if(m_lbreak)
break;
} 主线程的代码如下:
BOOL CPipe::StopThread()
{
if (tran)
{
::EnterCriticalSection(&m_css);
m_break=TRUE;
::LeaveCriticalSection(&m_css);
if (tran)
{
WaitForSingleObject(tran,INFINITE);
}
CloseHandle(tran);
tran=0;
return TRUE;
}
DeleteCriticalSection(&m_css);
return FALSE;
} 主线程通过改变变量m_break的值,通知子线程退出循环,并且WaitForSingleObject(tran,INFINITE)等待循环退出!
此时出现的问题是,为什么这个,变量值改变了,然而子线程的这个变量值没有改变,依然没有退出循环,因此主线程一直WaitForSingleObject(tran,INFINITE)等待,得不到通知?请高手帮忙!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货