我要发帖 回复

新手上路

2

主题

17

积分

0

专家分

:

私信
发表时间 : 2009-12-22 16:01:15 | 浏览 : 3897    评论 : 6
我在程序中用osgDB::readImageFile(fileName)来读取一个png文件。奇怪的是,程序运行的时候,大多数的情况都能正常运行,但有时候会出错,读取文件出现中断。vs有下面的提示:
0x00b5c451 处未处理的异常: 0xC0000005: 读取位置 0x000001a8 时发生访问冲突
每次都是在读取文件的时候出问题。而且每次刚刚打开vs解决方案第一次运行的时候一般会出现上面的这个中断,停止调试后在运行就没问题了,而且接连几遍运行一般都不会出现问题。偶尔在正常运行10次左右的时候又会出现问题。有的时候第一次vs加载解决方案后运行也正常。这到底是怎么回事?这种有时候出问题的毛病连调试起来都费劲。大家遇到故这种情况么?帮帮忙啊~~~

最近VR访客

kidd_wade 评论于2009-12-22 16:30:47
对了,补充一下,我用的是osg 2.9.5是版本的问题么?
kidd_wade 评论于2009-12-23 16:51:06
解决了,多谢array!
back 评论于2009-12-24 14:58:04
怎么解决的啊 说下呢
bq_cui 评论于2010-1-21 06:46:23
对啊,你怎么解决的呢?
我用的2.8.2,预编译版,每次都出这种问题,试了jpg png tga 格式文件,都这样。下载了src版本,自己编译,ok了。
kidd_wade 评论于2010-1-21 22:38:42
不好意思啊,好久不看了{:2_60:}
我在osgChina论坛上也提了这个问题,把解决的过程写在那里了。其实我最后也不知道到底怎么解决的,把解决的方法粘到这里到这里大家看看有没有参考价值,呵呵~

呵呵,问题解决了~挺奇怪的。我的程序里有两个线程,主线程读取png图片,然后显示。后台线程从文件里读取模型。主线程会从后台线程获取读取的进度百分比(用主线程中的节点的updateCallBack反复读)。原来我是先让后台线程start之后才开始在主线程中读取图片,声明节点,显示图片。就会大概运行10次左右的情况下出现中断,提示读取png文件错误。之后我把执行顺序改了,先让主线程读取png文件,建立节点,显示,然后在启动后台线程,这样就没有问题了。其实现在还是不太明白为什么原来偶尔会出错,后台线程并没有操作主线程中的东西啊。不过还好这样解决了。呵呵~~多谢array了!~
StackSnow 评论于2011-12-19 16:41:52
应该是在viewer->run()之后,对场景树进行了添加节点的原因吧,不要在无法确定的情况下执行对场景的操作,应尽量在回调或者GUIEventHandler中执行这些操作

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-2-25 03:57 PM

返回顶部