我使用ORBacus。我有一个多线程应用程序,我想在同一个进程中有多个 ORB 对象。这个想法是:每个线程都有自己的 ORB 并连接到不同的服务器。
这甚至可能吗?如果是这样 - 如何?
“你试过什么? ”:我有
CORBA::ORB_var m_varOrb;
在每个线程中。每个线程调用。每个线程都有Reconnect
方法,该方法执行:
// ...
m_varOrb = CORBA::ORB_init( argc, argv );
这些问题,我有:
当多个线程同时尝试重新连接时,应用程序在
m_varOrb->destroy();
或 中崩溃CORBA::ORB_init
。我尝试同步线程,以便所有线程尝试一一重新连接到配置的服务器(使用 a
static mutex
)-仍然无法正常工作-当一个线程尝试销毁“其” ORB对象时-再次崩溃destroy
(某些断言失败,因为某些引用计数 > 1;看起来像是指向真实 ORB 对象的引用计数指针)我添加了一个条件等待,所以线程
ORB_init
只有在所有线程都执行后才开始调用destroy
;在 ORB 周围制作了一个单例包装类,同步线程以一个接一个地连接,一切都开始工作得很好。但这意味着 - 只有一个 ORB,所以只有一个服务器。坏的。
所以,所有这些事情都让我觉得,我被允许每个进程只有一个 ORB 对象。我错过了什么吗?