跟贴请点击 http://www.huihoo.com/cgi-bin/forum/viewthread.php?tid=514
作者 文章标题 CORBA多线程




新手上路



贴子数量 : 48
注册日期 : 3/1/2002
在线情况 : 离线

  发表于: 4/9/2002 - 07:06
我的开发环境是win2000+bcb5.0+visibroker4.0
请问,怎样在corba的服务器端实现多线程,以及共享冲突,哪儿有实例呀?
多谢!

 
查看此人的个人资料 发送E-Mail给此人 编辑贴子 引用回复 搜索此人的所有贴子 给此人发送短消息




版主



贴子数量 : 203
注册日期 : 11/16/2001
在线情况 : 离线

  发表于: 4/9/2002 - 08:30
POA线程策略有两个:SINGLE_THREAD and ORB_CONTROL.
注意, 这里讲的是ORB_CONTROL,不是POA_CONTROL,可以理解为POA的多线程表现是由ORB提供的。

对于后者,corba标准里没有规定如何实现,但一般有三种实现:
1.request per thread, 对每个请求开一个线程
2.client per thread,对每客户端开一个线程
3.thread pool,线程池

一般来讲,线程池就够了(Orbix2k默认状态就是这样的)

对于一些存在线程不安全的servant,避免共享冲突,需要加入一些mutex,可以找到一些 提供线程控制的软件包,如ACE,rogueware 。
ORbix2k用它自己做的线程控制库(你可以装一个试试, 它有大量的文档和例子来讲线程控制)

cheers
 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子 给此人发送短消息




版主



贴子数量 : 62
注册日期 : 2/28/2002
在线情况 : 离线

  发表于: 4/9/2002 - 09:54
VisiBroker 的多线程策略包括:
1.thread pooling
2.thread-per-session.
VisiBroker Server 缺省方式是“thread pooling”

Cbuilder5 中有 Corba 的例子:.. CBuilder5\Examples\Corba\corbamidas ,
里面有线程互斥的代码,你可以参考一下。
 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子 给此人发送短消息




新手上路



贴子数量 : 48
注册日期 : 3/1/2002
在线情况 : 离线

  发表于: 4/10/2002 - 01:05
我在服务器端有两个事件循环,一个是orb接受客户的请求,还有一个是windows的,orb->run()后,orb就进入了它的事件循环,但windows的事件循环不知怎样进入?
 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子 给此人发送短消息




版主



贴子数量 : 203
注册日期 : 11/16/2001
在线情况 : 离线

  发表于: 4/10/2002 - 06:53
http://www2.iona.com/MinervaRoot/index.jsp?action=article&catId=_0&articleURL=/support/articles/1206.773.xml

希望有所启发。




 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子 给此人发送短消息




版主



贴子数量 : 62
注册日期 : 2/28/2002
在线情况 : 离线

  发表于: 4/12/2002 - 03:51
可以在 Cbuilder 主程序中 new 一个新的线程,将orb->run()放在新线程中执行。我试过,可以。
 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子 给此人发送短消息




新手上路



贴子数量 : 38
注册日期 : 3/15/2002
在线情况 : 离线

  发表于: 4/15/2002 - 14:06
在ORBIX vc6。0中 GUI 编程 ,来开辟一个线程来处理ORB->RUN();
It is ok! i do it.
 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子 给此人发送短消息




新手上路



贴子数量 : 3
注册日期 : 7/13/2002
在线情况 : 离线

  发表于: 7/13/2002 - 13:24
orbix2k+VC6.0中, 如果开辟一个线程来运行orb->run(),那么如何
使该线程安全地退出呢?

还有一个问题:
如果在线程中用:
while (::WaitForSingleObject(eventExit, 0) != WAIT_OBJECT_0)
{
if (orb->work_pending())
{
perform_work()
}
}
那么可以看到, 这个程序将占用99%的系统资源, 不知道如何解决?
 
发送E-Mail给此人 编辑贴子 引用回复 查看此人的所有贴子 给此人发送短消息
COPYRIGHT © 2001-2002 huihoo.com
E-mail:[email protected]