找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5708|回复: 3

关于ACE_Select_Reactor

[复制链接]
发表于 2010-1-12 23:57:18 | 显示全部楼层 |阅读模式
书上说使用ACE_Select_Reactor只能一个线程执行Reactor_Event_Loop。
这到底要怎么理解?
发表于 2010-1-13 14:51:06 | 显示全部楼层
一个CAceReactor有一个run_reactor_event_loop(),如果你用的是单件的CAceReactor对象,则就有一个。
 楼主| 发表于 2010-1-13 22:13:21 | 显示全部楼层
我觉得还是多个线程可以执行run_reactor_event_loop()的,但是书上很多地方都强调只能一个线程执行run_reactor_event_loop()
指的是创建Select_Reactor的线程和执行run_reactor_event_loop()的线程必须是同一个。
举例来说
例1:
线程1:
ACE_Select_Reactor *select_reactor = new ACE_Select_Reactor;
ACE_Reactor *reactor= new ACE_Reactor(select_reactor,1);
reactor->run_reactor_event_loop();
这种是可以的。

例2:
线程1:
ACE_Select_Reactor *select_reactor1 = new ACE_Select_Reactor;
ACE_Reactor *reactor1= new ACE_Reactor(select_reactor1,1);
reactor1->run_reactor_event_loop();
线程2:
ACE_Select_Reactor *select_reactor2 = new ACE_Select_Reactor;
ACE_Reactor *reactor2= new ACE_Reactor(select_reactor2,1);
reactor2->run_reactor_event_loop();

这样也是可以的
例3:
线程1:
ACE_Select_Reactor *select_reactor = new ACE_Select_Reactor;
ACE_Reactor *reactor1= new ACE_Reactor(select_reactor,1);
线程2:
reactor->run_reactor_event_loop();

这样是不行的
线程2必须这样才行
reactor->owner(ACE_OS::thr_self ());
reactor->run_reactor_event_loop();

以上是我的理解,理解错的地方,还请论坛里的高手指教一下。
发表于 2010-1-14 14:44:59 | 显示全部楼层
run_reactor_event_loop()必须在一个线程里面。这是对的。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-23 13:06 , Processed in 0.028083 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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