主线程与子线程同步一个变量,主线程改变了变量值,子线程收不到

来源:百度知道 编辑:UC知道 时间:2024/06/18 08:21:46
子线程的代码如下:
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)

::LeaveCriticalSection(&m_css);
Sleep(1)

试试,不知道行不。

为何不设置两个断点来调试呢,一个在SendMessage后面
::EnterCriticalSection(&m_css);
一个在你的主线程等待那里
-----------华丽的分割线---------------
实际上你根本不用那样做,你可以设置一个event,在子线程完成时激活这个事件,主线程等待这个事件就好了