MFC+OSG做场景编辑器时,会经常出现BUG,最主要的原因是多线程造成的结果。多线程保护有关键代码段、互斥对象等方法,可以参看孙鑫的vc++的书,上面介绍的很详细。
但后来用互斥对象保护还是出现问题,搞了好几天才搞明白要用互斥对象保护OSG绘制过程中的每一帧,不然还会出现多线程干扰错误,关键处代码如下
while(!viewer->done())
{
WaitForSingleObject(hMutex,INFINITE);
osg->PreFrameUpdate();
viewer->frame();
osg->PostFrameUpdate();
ReleaseMutex(hMutex);
}
要保护这里绘制的每一帧,我开始没仔细想,将整个while循环保护起来,这其实没什么用的。