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。
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/TAO/docs/configurations.html
这是tao的线程模型,也许对你有帮助。 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.)。谢谢了! 自己封装一个
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]