MyException - 我的异常网
当前位置:我的异常网» VC/MFC » VC中出现的程序运行有时出现终止的有关问题,可能是

VC中出现的程序运行有时出现终止的有关问题,可能是多线程的原因,求大神解答,非常感谢

www.myexceptions.net  网友分享于:2013-04-10  浏览:9次
VC中出现的程序运行有时出现终止的问题,可能是多线程的原因,求大神解答,非常感谢
是不是这句有问题:

//创建敌人坦克的多线程函数
UINT CreateEnemyTank(LPVOID lpParameter)
{
enemyNum++;
CDC* pDC =(CDC*)lpParameter;
enemyTank[enemySum-1]=new CEnemyTank(pDC);
enemyTank[enemySum-1]->autoMove();
    return 0;
}
void CEnemyTank::autoMove()
{
srand(unsigned(time(0)));
    //srand(enemySum);
while(1)
{
if(m_life==0)
{
break;
}
        
//srand((unsigned int)time(NULL));
int i=rand()%4;
//int i=rand()*m_tankType*m_enemyTankType*enemySum%4;

        //int i=int(4*rand()/(RAND_MAX + 1.0))*m_enemyTankType*enemySum%4;
if(i==0)
{
changeDir(LEFT);
for(;;)
{
if(!isBeyond(this,-15,0)&&map->CanGo(this)&&map->canMove(this))
{
move(-15,0);
showTank(m_pDC);
fire();
Sleep(200);


}else
{
break;
}

}

}
else if(i==1)
{
changeDir(RIGHT);
for(;;)
{
if(!isBeyond(this,15,0)&&map->CanGo(this)&&map->canMove(this))
{
move(15,0);

//m_dir=RIGHT;
showTank(m_pDC);
fire();
Sleep(200);


}else
{
break;
}

}

}
else if(i==2)
{
changeDir(DOWN);
for(;;)
{
if(!isBeyond(this,0,15)&&map->CanGo(this)&&map->canMove(this))
{
move(0,15);

//m_dir=DOWN;
showTank(m_pDC);
fire();
Sleep(200);


}else
{
break;
}

}
}
else if(i==3)
{
changeDir(UP);
for(;;)
{
if(!isBeyond(this,0,-15)&&map->CanGo(this)&&map->canMove(this))
{
move(0,-15);

//m_dir=UP;
showTank(m_pDC);
fire();
Sleep(200);


}else
{
break;
}
}

}
fire();
showTank(m_pDC);

}
}
void CEnemyTank::fire()
{

if(m_canShoot)
{
AfxBeginThread(CreateBullet,this);

mciSendString("play ./Music/eshot.wav","",0,NULL);

}




}
//创建子弹的多线程函数
UINT CreateBullet(LPVOID lpParameter)
{

CTank* tank =(CTank*)lpParameter;

CBullet* bullet=tank->getBullet();
bullet->setTankType(tank->getTankType());
if(tank->getCanShoot())
{
tank->changeCanShoot(FALSE);
bullet->move(tank->getCDC(),tank->getDir(),tank->getPoint());
tank->changeCanShoot(TRUE);
}
    tank->showTank(tank->getCDC());
  return 0;
}
多线程 VC/MFC

------解决方案--------------------
看调用栈,设置好调试符号(pdb)路径,包括微软的和你自己程序的pdb。
------解决方案--------------------
别的先不说,不要把CDC这种上下文保存在对象中,需要绘制的时候穿参数进去好了。
另外这么个小游戏有必要用多线程么,而且也没看到任何同步措施。什么游戏都不会一个角色开一个线程。
还看到了用mci放声音……呃。

不好意思吐槽一下,我觉得你这是在浪费时间:要学多线程就要学线程同步,要学游戏就要学游戏循环、游戏图形和多媒体,完全自己喜欢随便玩玩真是浪费你的时间。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有