查看: 1279|回复: 3

请教个很具体的线程调度的问题

[复制链接]

该用户从未签到

发表于 2010-4-17 17:05:30 | 显示全部楼层 |阅读模式
本帖最后由 firecome 于 2010-4-17 17:06 编辑

OSG程序里面有一个用windos.h的CreateThread建立的接受网络数据的线程,在osg的主函数里建立的,用来接受和刷新场景中多模型的位置信息,位置信息在每个模型的回调里生效。
    发现模型并不是一直同步更新到新位置,有时候有的会先走,有的滞后一些,由于滞后时间比较短,模型会闪一下到新位置。
    分析原因应该是由于网络线程和主线程等级都是普通,网络线程操作模型位置信息的频率比主线程绘制渲染的要慢,主线程用2个不同帧画出了网络线程希望1帧表达的状态。
   现在想请教个办法解决这种问题,网络线程在操作模型位置信息时候希望阻塞主函数该怎么实现?或者怎么给这些位置信息加上内存锁?
   不知道表达清楚了没

该用户从未签到

发表于 2010-4-19 08:34:23 | 显示全部楼层
如果您使用Windows API的线程函数来进行操作的话,那么按照一般Windows编程的策略去同步或加锁就可以了。如果您用的是OpenThreads,那么可以在主线程中方便地使用Block::block()阻塞,set(true)释放;或者用ScopedLock<Mutex>快速加锁(锁只作用于自己的生命周期内,这是一个很方便的功能)

该用户从未签到

 楼主| 发表于 2010-4-19 13:50:45 | 显示全部楼层
网络线程是用win api函数建立的,但是主函数(带有viewer.run的)没有显式的声明建立线程,没有句柄可以对其进行操作,请问该怎么办

该用户从未签到

发表于 2010-4-19 14:15:19 | 显示全部楼层
我个人对Windows API的线程不是特别了解,不过您可以将getCamera()->getGraphicsContext()动态类型转换为GraphicsWindowWin32,然后获取HWND
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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