关于 AfxBeginThread 创建多个线程
以下是程序代码
void CViewMonitorDlgGroup::PlayCabMoveProc()
{
while(1)
{
for(int i=0;i<4;i++)
{
this->iCurLeft = i; //将i值做为参数传递进去
m_hPlayDoor = AfxBeginThread(PlayOpenDoorThread,this);
}
}
}
UINT CViewMonitorDlgGroup::PlayOpenDoorThread(void *pParam)
{
CViewMonitorDlgGroup *pDlg = (CViewMonitorDlgGroup *)pParam;
pDlg->PlayOpenDoorProc(pDlg->iCurLeft);
return 0;
}
void CViewMonitorDlgGroup::PlayOpenDoorProc(int iCurLeft)
{
m_Cabinet[iCurLeft].SetBitmap(IDB_BITMAP_LEFT);
}
此段程序运行时只看到i=3时 加载程序的效果,为什么其它i值时图片没有加载。
[解决办法]
for(int i=0;i<4;i++)
{
this->iCurLeft = i; //这里会被循环覆盖掉,造成错误
循环中AfxBeginThread()启动的线程,并非是在AfxBeginThread()函数执行完毕后就保证立即执行的,很可能循环了好多次了,其中某个线程才开始执行(具体顺序取决于CPU如何调度)
[解决办法]
多线程模式下,对于共用资源需要进行同步(排队)处理
[解决办法]