查看: 1518|回复: 5

MFC_OSG线程的问题

[复制链接]

该用户从未签到

发表于 2010-1-22 22:35:50 | 显示全部楼层 |阅读模式
本帖最后由 lyc0 于 2010-1-23 00:11 编辑

开发环境:
OSG库版本OpenSceneGraph-2.8.2 Debug
VS 2008 SP1

问题:参照OSGMFC的例子,自己写了一个单文档mfc的OSG例子,发现一个问题,在关闭程序时候,有时会出现线程无法关闭的情况  (osg初始化在OnPaint中,因为CWnd没有OnInitialUpdate函数)

情况一:
1. 改动只是将OnDestroy()中的等待时间改为INFINITE。。。
WaitForSingleObject(m_ThreadHandle, /*1000*/INFINITE);


此时,运行,然后关闭,这样重复几次,会有一两次出现无法关闭线程的情况(此时窗口已经关闭),经过尝试用ALT+F4出现的几率会比正常关闭要高。。。此时,必须使用VS的停止调试来关闭,即调试没自动关闭。。。


情况二:
2. 无论是INFINITE还是1000,若可以正常关闭,但是还是会出现内存泄漏提示( 这个问题和大家问到那个MFC泄漏不同,工程已经添加MFC90d.lib和MFCm90d.lib,并且已经解决),在公司测试此问题时,设为等待线程1000,此问题更加严重,窗口关闭后,居然还有程序的进程残留(通过任务管理器看)。。。

Detected memory leaks!
Dumping objects ->
{53535} normal block at 0x0262FB80, 1 bytes long.
Data: < > CD
Object dump complete.


工程文件已经上传,麻烦大家帮忙测试一下。。。谢谢

test.rar (112.44 KB, 下载次数: 129)

该用户从未签到

 楼主| 发表于 2010-1-23 12:42:13 | 显示全部楼层
以前FreeSouth 发过的一张类似的贴,不知道有没有关系??

《[注意]多线程渲染需要注意的问题》
http://www.osgchina.org/bbs/view ... hlight=%CF%DF%B3%CC

该用户从未签到

发表于 2010-1-23 19:25:56 | 显示全部楼层
在WaitForSingleObject(m_ThreadHandle, /*1000*/INFINITE);之前添加pViewer->setDone(true)试试;另外可参看王锐写的书,注意尽量使用智能指针。

该用户从未签到

 楼主| 发表于 2010-1-23 19:50:38 | 显示全部楼层
<在WaitForSingleObject(m_ThreadHandle, /*1000*/INFINITE);之前添加pViewer->setDone(true)试试>

试过了,也是不行的

该用户从未签到

发表于 2010-1-25 10:12:41 | 显示全部楼层
这儿7.0打不开你的文件
尝试使用单线程看看
m_Viewer->setThreadingModel( osgViewer::ViewerBase::SingleThreaded );

该用户从未签到

 楼主| 发表于 2010-1-25 14:57:01 | 显示全部楼层
改为SingleThreaded也是不行,而且,用ALT+F4来关闭,出现的机率会很大....
(ALT +F4  与正常关闭有何区别吗??)

现在用的是AutomaticSelection
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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