查看: 2502|回复: 7

OpenThreads线程暂停和恢复

[复制链接]

该用户从未签到

发表于 2010-4-13 10:23:11 | 显示全部楼层 |阅读模式
我使用OpenThreads::Thread,希望能够像winapi的线程那样使用SuspendThread和ResumeThread来控制线程。
看了下OpenThreads的代码,发现线程的HANDLE在Win32ThreadPrivateData这个类里面,我想问问怎么才能从Thread取得这个东东?osg里面好像没有这个类的定义。。
另外这个可以用阻塞来做么?
请大虾们给点思路,谢谢。

该用户从未签到

发表于 2010-4-13 10:43:49 | 显示全部楼层
可以用阻塞啊,还有栅栏都行啊

该用户从未签到

 楼主| 发表于 2010-4-13 10:50:47 | 显示全部楼层
阻塞试过,很恶心,主线程调用了thread里面的block就主线程塞了。。。
我是希望能够让副线程可以什么都不管一个劲的死循环,然后由主线程进行控制。。。
这样的需求是不是一定要线程的handle才能搞呢?

该用户从未签到

 楼主| 发表于 2010-4-13 10:55:58 | 显示全部楼层
再说明一下,我的副线程是提供给用户编程的接口,用户可以在这个线程函数里面随意发挥,用户并不需要自己对自己进行什么阻塞的,同步的问题都由主线程来弄。。。嗯。。。就是这么麻烦。。。

该用户从未签到

发表于 2010-4-13 12:31:50 | 显示全部楼层
线程的HANDLE在Win32ThreadPrivateData这个类里面,我想问问怎么才能从Thread取得这个东东
请放心,不会提供这样的接口,那样会导致整个线程机制变得不稳定~~

主线程调用了thread里面的block就主线程塞了
印象中我的书里专门讲个这一点:OpenThreads的确提供了面向对象的线程处理机制,但是多数情况下把OpenThreads的类作为用户类的成员并没有意义:它还是只作用于当前调用它的线程

不过阻塞是完全可以实现您所说的要求的:在子线程类的run()函数中写一个标志量_isPaused,并且判断if(_isPaused) _block.block();
这之后,给子线程类提供一个成员函数void resume() { isPaused=false; _block.set(true); },并在主线程中适时执行

该用户从未签到

 楼主| 发表于 2010-4-13 17:19:33 | 显示全部楼层
看来是必须在线程函数里加判断了。。。
感谢。

该用户从未签到

发表于 2011-7-5 13:38:11 | 显示全部楼层
回复 5# array


    我想问你写的是哪本书,我想看看......

该用户从未签到

发表于 2011-7-5 15:56:41 | 显示全部楼层
OpenSceneGraph三维渲染引擎设计与实践
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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