TA的每日心情 | 开心 2019-11-11 10:36 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
在这个论坛上,我改了官方的一个单文档框架,无论是单文档的还是多文档的还是Array的OCX控件使用的都是下面的线程进行渲染
//------------------------------//------------------------------
//渲染线程,独立的
void CCoreOSG::Render(void* ptr)
{
CCoreOSG* osg = (CCoreOSG*)ptr;
osgViewer::Viewer* viewer = osg->getViewer();
//可以这样
// viewer->run() or
// while(!viewer->done()) { viewer->frame(); }
//viewer->run();
//也可以这样,我建议这样
while(!viewer->done())
{
osg->PreFrameUpdate();
viewer->frame();
osg->PostFrameUpdate();
//Sleep(10); // 让其它程也占用CPU,放出10MS
}
//退出了程序,弹出个对话框说一下
AfxMessageBox("线程退出");
//线程退出
_endthread();
}
该程序很禁得起考验,读入2G数据,跑了一天一夜基本上没有什么变化,速度方面相当可观,与开始时占用的内存大小也没什么变化,故只可能存在极小的泄漏,小到可以忽略,
但多线程控制有一个地方让人担扰,在对viewer与root进行频繁的addSlave removeSlave pick removeChild等等操作时Render究竟走到哪里了,会不会暴死,
肯定是会的,尤其在对图形上下文操时,暴死频繁,这就需要在对Render进行处理,在进行暴死的操作时LOCK它
希望对Render的这些暴死点有所突破, |
|