有全局变量
CCriticalSection ccr;
int tn;然后在一线程A中
ccr.Lock();
tn = 1;
for(tn = 0;tn<20;tn++)
{
Sleep(1000);
}
ccr.Unlock();在另一线程B中有 int k=-3;
while(k<tn)
{
nn.Format(_T("%d"),tn);
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_GETCRI,nn);
Sleep(1000);
k++;
}
然后先启动线程A,2秒后启动线程B
从代码上理解,应该是A被启动后,将tn锁住,然后过一秒就+1,20秒后解锁,而在加到20前,B应该是不能读到tn的吧?!
可从运行情况来看,由B控制的编辑框却显示它在A运作的时间里依然可以读到tn,并很自然地按条件每秒更新了,这是怎么回事?
CCriticalSection ccr;
int tn;然后在一线程A中
ccr.Lock();
tn = 1;
for(tn = 0;tn<20;tn++)
{
Sleep(1000);
}
ccr.Unlock();在另一线程B中有 int k=-3;
while(k<tn)
{
nn.Format(_T("%d"),tn);
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_GETCRI,nn);
Sleep(1000);
k++;
}
然后先启动线程A,2秒后启动线程B
从代码上理解,应该是A被启动后,将tn锁住,然后过一秒就+1,20秒后解锁,而在加到20前,B应该是不能读到tn的吧?!
可从运行情况来看,由B控制的编辑框却显示它在A运作的时间里依然可以读到tn,并很自然地按条件每秒更新了,这是怎么回事?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货