找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 8389|回复: 3

TAO ORB相关问题

[复制链接]
发表于 2012-6-19 11:01:40 | 显示全部楼层 |阅读模式
最近遇到一个问题,请熟悉TAO的朋友帮忙分析分析。
据小弟所知,orb->run()可以阻塞循环等待请求,然后分派给相应的servant。如果没有orb->run()或者orb->perform_works(),连接线程也是可以处理请求的。
现在我想知道TAO里面有没有这种实现,orb在init的时候就产生多个工作线程,然后建立连接。请求可以通过这些工作线程到达。当请求到来时给他们排队到一个工作队列中,先不处理。然后再在一个指定的线程中调用orb->run()或者orb->perform_works()把请求分派到对应的servant处理。
我想知道的是TAO是否能实现上面我所描述的情况,特别是两点:
1. orb在init的时候是否能创建多个工作线程;
2. 是否请求能被排队而不直接被do_dispatch到空闲的线程或者servant。
发表于 2012-6-29 06:43:19 | 显示全部楼层
http://www.dre.vanderbilt.edu/~s ... configurations.html
这是tao的线程模型,也许对你有帮助。
 楼主| 发表于 2012-7-3 18:23:25 | 显示全部楼层
sevencat 发表于 2012-6-29 06:43
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/TAO/docs/configurations.html
这是tao的线程模型,也许 ...

这两天忙,才看到你给的链接。很不错。我之前胡乱弄的东西居然就在里面有这种模型(Multiple threads, single ORB, TAO thread-pool model.)。谢谢了!
发表于 2013-9-16 12:59:29 | 显示全部楼层
自己封装一个
class Worker_Thread : public ACE_Task_Base
{
public:
        /// Constructor
        Worker_Thread(CORBA::ORB_ptr orb);

        // = The service method
        virtual int svc (void);

private:
        CORBA::ORB_var Orb_;
}


Worker_Thread::Worker_Thread (CORBA::ORB_ptr orb)
: Orb_ (CORBA::ORB::_duplicate (orb))
{
}

//线程处理函数
int Worker_Thread::svc(void)
{
        try
        {
                while (!bThreadExit.bJustifyBool() && !CIDLAgent::bThreadExit.bJustifyBool())
                {
                        //global_orb->run();
                        if (Orb_->work_pending())
                        {
                                Orb_->perform_work();
                        }
                        //changed by zly run the back worker in another thread.
                        //oGlobalBackWorker.vPerformWork();
                        //half second call
                        vSleep(40);
                }
        }
        catch (const CORBA::Exception&)
        {

        }
        return 0;
}
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-21 17:48 , Processed in 0.025909 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表