luke 发表于 2012-6-19 11:01:40

TAO ORB相关问题

最近遇到一个问题,请熟悉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。

sevencat 发表于 2012-6-29 06:43:19

http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/TAO/docs/configurations.html
这是tao的线程模型,也许对你有帮助。

luke 发表于 2012-7-3 18:23:25

sevencat 发表于 2012-6-29 06:43 static/image/common/back.gif
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/TAO/docs/configurations.html
这是tao的线程模型,也许 ...

这两天忙,才看到你给的链接。很不错。我之前胡乱弄的东西居然就在里面有这种模型(Multiple threads, single ORB, TAO thread-pool model.)。谢谢了!

yubobarye 发表于 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;
}
页: [1]
查看完整版本: TAO ORB相关问题