查看: 2990|回复: 11

addslave问题

[复制链接]

该用户从未签到

发表于 2011-6-13 15:41:05 | 显示全部楼层 |阅读模式
我在MFC框架下实现动态添加HUD,即用鼠标拖动形成一个长方形区域,根据这个区域大小,创建一个camera,但是会出现线程冲突导致程序死机,代码简写如下:
  1. class class CMyEventHandler:public osggA::GUIEventHandler
  2. {
  3. osgViewer* viewer=.........;
  4. case:RELEASE
  5. {
  6. //创建HUD
  7. .................................
  8. camera->addChid(osgDB::readNodeFile("axes.osg"));
  9. viewer->addSlave(camera,false);
  10. viewer->getSceneData()->asGroup()->addChild(camera);//这一句在第一次创建时不会有线程冲突,但在多次创建后会出现线程冲突,不知道为什么?在win32控制台下,就没问题
  11. }
  12. }
复制代码

该用户从未签到

发表于 2011-6-13 17:05:15 | 显示全部楼层
你这个handler关联给谁了?应该给viewer吧

该用户从未签到

 楼主| 发表于 2011-6-13 18:44:34 | 显示全部楼层
回复 2# tianxiao888 是给viewer的

该用户从未签到

发表于 2011-6-13 18:59:21 | 显示全部楼层
不清楚喽,从代码里也看不出啥了

该用户从未签到

 楼主| 发表于 2011-6-13 19:14:39 | 显示全部楼层
回复 4# tianxiao888
你可以试一下吗?如果你也出现这样的情况,那就可能是osg哪里有bug了,如果你没有的话,那就是我自己写的代码的问题了,但从理论上来讲应该没什么问题呀

该用户从未签到

发表于 2011-6-14 08:28:21 | 显示全部楼层
您的addSlave是在什么时候执行的?在什么位置?如果您是在运行中从MFC的控件事件中做这些事情,那显而易见会有大问题——而且是经典的线程冲突错误,这在其他帖子里已经说过无数次了

该用户从未签到

 楼主| 发表于 2011-6-14 08:42:05 | 显示全部楼层
回复 6# array


    谢谢array,我就是这样做的,难怪会出现这样的问题,array能给个帖子链接或解决的方案吗?我确实是需要动态创建hud

该用户从未签到

发表于 2011-6-14 13:25:39 | 显示全部楼层
最简单的建议就是在更新回调或者EventHandler里做这些事情

该用户从未签到

 楼主| 发表于 2011-6-14 13:44:49 | 显示全部楼层
回复 8# array


    我在MFC菜单响应事件里添加m_pView->addEventHandler(new CMyEventHandler); 不知道array说的eventhandler是什么意思?更新回调我这里好像不太适用

该用户从未签到

发表于 2011-6-15 08:14:48 | 显示全部楼层
更新回调没有什么问题,不知道您在其中执行了什么代码

该用户从未签到

发表于 2011-6-15 19:51:22 | 显示全部楼层
MFC菜单响应事件里添加是绝对不可取的!!!这俩线程,不乱套了!!
MFC你可以传递消息给osg,在osg里进行添加

该用户从未签到

 楼主| 发表于 2011-11-8 22:13:10 | 显示全部楼层
本帖最后由 garyliyong 于 2011-11-8 22:14 编辑
array 发表于 2011-6-15 08:14
更新回调没有什么问题,不知道您在其中执行了什么代码


array大侠您好,我在更新回调里添加HUD,为什么还会出现线程冲突呀?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表