线程故障!解决办法
线程故障!!
void CMFC_Ant_MultithredingDlg::OnAnt() //启动线程!!!
{
// TODO: Add your control notification handler code here
//m_Param-> m_Paint=this;
AfxBeginThread(ThreadFun,(LPVOID)this);
}
UINT CMFC_Ant_MultithredingDlg::ThreadFun(LPVOID pParam)
{
srand( (unsigned)time( NULL ) );
CMFC_Ant_MultithredingDlg *m_Param=(CMFC_Ant_MultithredingDlg*)pParam;
CClientDC dc(m_Param);
int m_direction;
m_Param-> m_Param-> m_Ant.x=200;
m_Param-> m_Param-> m_Ant.y=200;
dc.SetPixel(m_Param-> m_Param-> m_Ant.x,m_Param-> m_Param-> m_Ant.y,RGB(255,0,0));
for (int i;i <1000;i++)
{
m_direction=rand()%8;
switch(m_direction)
{
case 0:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x--,m_Param-> m_Param-> m_Ant.y++,RGB(255,255,255));
break;
case 1:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x,m_Param-> m_Param-> m_Ant.y++,RGB(255,255,255));
break;
case 2:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x++,m_Param-> m_Param-> m_Ant.y++,RGB(255,255,255));
break;
case 3:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x--,m_Param-> m_Param-> m_Ant.y,RGB(255,255,255));
break;
case 4:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x++,m_Param-> m_Param-> m_Ant.y,RGB(255,255,255));
break;
case 5:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x--,m_Param-> m_Param-> m_Ant.y--,RGB(255,255,255));
break;
case 6:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x,m_Param-> m_Param-> m_Ant.y--,RGB(255,255,255));
break;
case 7:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x++,m_Param-> m_Param-> m_Ant.y--,RGB(255,255,255));
break;
}
dc.SetPixel(m_Param-> m_Param-> m_Ant.x,m_Param-> m_Param-> m_Ant.y,RGB(255,0,0));
//Sleep(1);
}
return 1;
}
调试通过了!但是点按扭就出错误!!!为什么啊?
没分了!不然一定多给!谢谢!!
------解决方案--------------------
问题比较多,基本上,最主要的还是不能把MFC的对象在线程里面乱传。只能传句柄。
------解决方案--------------------
CClientDC dc(m_Param);
dcBUDUI
------解决方案--------------------
应该是
m_Param-> m_Param-> m_Ant.x=200;
下面有问题,我看前面都没有什么问题
八成是m_Param指针的使用问题
void CMFC_Ant_MultithredingDlg::OnAnt() //启动线程!!!
{
// TODO: Add your control notification handler code here
//m_Param-> m_Paint=this;
AfxBeginThread(ThreadFun,(LPVOID)this);
}
UINT CMFC_Ant_MultithredingDlg::ThreadFun(LPVOID pParam)
{
srand( (unsigned)time( NULL ) );
CMFC_Ant_MultithredingDlg *m_Param=(CMFC_Ant_MultithredingDlg*)pParam;
CClientDC dc(m_Param);
int m_direction;
m_Param-> m_Param-> m_Ant.x=200;
m_Param-> m_Param-> m_Ant.y=200;
dc.SetPixel(m_Param-> m_Param-> m_Ant.x,m_Param-> m_Param-> m_Ant.y,RGB(255,0,0));
for (int i;i <1000;i++)
{
m_direction=rand()%8;
switch(m_direction)
{
case 0:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x--,m_Param-> m_Param-> m_Ant.y++,RGB(255,255,255));
break;
case 1:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x,m_Param-> m_Param-> m_Ant.y++,RGB(255,255,255));
break;
case 2:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x++,m_Param-> m_Param-> m_Ant.y++,RGB(255,255,255));
break;
case 3:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x--,m_Param-> m_Param-> m_Ant.y,RGB(255,255,255));
break;
case 4:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x++,m_Param-> m_Param-> m_Ant.y,RGB(255,255,255));
break;
case 5:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x--,m_Param-> m_Param-> m_Ant.y--,RGB(255,255,255));
break;
case 6:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x,m_Param-> m_Param-> m_Ant.y--,RGB(255,255,255));
break;
case 7:
dc.SetPixel(m_Param-> m_Param-> m_Ant.x++,m_Param-> m_Param-> m_Ant.y--,RGB(255,255,255));
break;
}
dc.SetPixel(m_Param-> m_Param-> m_Ant.x,m_Param-> m_Param-> m_Ant.y,RGB(255,0,0));
//Sleep(1);
}
return 1;
}
调试通过了!但是点按扭就出错误!!!为什么啊?
没分了!不然一定多给!谢谢!!
------解决方案--------------------
问题比较多,基本上,最主要的还是不能把MFC的对象在线程里面乱传。只能传句柄。
------解决方案--------------------
CClientDC dc(m_Param);
dcBUDUI
------解决方案--------------------
应该是
m_Param-> m_Param-> m_Ant.x=200;
下面有问题,我看前面都没有什么问题
八成是m_Param指针的使用问题