查看: 3118|回复: 6

C#调用OSG的问题

[复制链接]

该用户从未签到

发表于 2012-8-27 11:09:36 | 显示全部楼层 |阅读模式
我尝试用CLI/C++来封装一些C#的接口,但是在反复运行那个exe程序的时候会出现问题
        void MainForm::runThread()
        {
                Object^ dummyViewerObject = gcnew Object;
                while ( !_viewer->done() )
                {
                        Monitor::Enter(dummyViewerObject);
                        _viewer->frame();
                        Monitor::Exit(dummyViewerObject);
                }
        }
总是会在 Monitor::Exit(dummyViewerObject); 报错,不清楚为什么会这样子?

第一次运行程序是没问题的,但是反复运行 反复运行的时候 偶尔就会奔溃。

该用户从未签到

发表于 2012-8-28 11:09:56 | 显示全部楼层
从您给出的程序中我没有看出特别的地方来

该用户从未签到

 楼主| 发表于 2012-8-29 14:43:41 | 显示全部楼层
A1@K2LJ9GS]J~P0FFL[N[N1.jpg
C#调用DLL的时候 有时候就是莫名的报这类的错误,但是不清楚怎么回事。

错误图片

错误图片

该用户从未签到

 楼主| 发表于 2012-8-30 10:06:14 | 显示全部楼层
array 发表于 2012-8-28 11:09
从您给出的程序中我没有看出特别的地方来

{8JL[1BJIJ64GYFQ{S(TA)T.jpg
报错的地方,貌似在C#调用的时候,最后跳转到Group的 60行
    for(NodeList::iterator itr=_children.begin();
        itr!=_children.end();
        ++itr)
std::vector 的99行 _DEBUG_ERROR("vector iterator not incrementable");
请教下 这个问题怎么解决?是要改分配内存吗?

该用户从未签到

 楼主| 发表于 2012-8-31 14:41:01 | 显示全部楼层
在debug的时候发现,++itr竟然会随机指向了莫名的地方,改成了
for(unsigned int i =0;i<_children.size();++i)
        {
                (_children[i])->accept(nv);
        }
还没有报错过,不知道可以与否。。。

该用户从未签到

发表于 2012-9-6 17:10:41 | 显示全部楼层
您是不是在渲染的同时有删除子节点的行为?并且这个行为恐怕是没有任何线程保护的,因此才会造成这种问题,即渲染过程正在遍历子节点时,后继的节点却突然被外部线程(很可能是您的界面线程)干掉了~~

该用户从未签到

 楼主| 发表于 2012-9-7 08:28:50 | 显示全部楼层
这个应该真的不清楚了,因为是每次刚启动程序的时候报的这个错误,我启动程序的时候一直都是在创建节点的,我在debug的时候发现vector 里面的值和个数也都是对的,真搞不清楚了,可能自己才搞C++,很多还都浮浅。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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