找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4774|回复: 1

请教结束 ACE_Proactor ?

[复制链接]
发表于 2008-9-9 19:20:41 | 显示全部楼层 |阅读模式
我在主线程main中ACE_Proactor::instance()->run_proactor_event_loop();
在handle_read_stream() 中将mb 放到一个task的消息队列中,
在task自己的线程中不断从消息队列中取mb并处理,
那么我怎么才能结束主线程呢?
我又不想将ACE_Proactor的完成事件循环放到另外一个线程中,那样的话,主线程就不起作用了, 会降低效率的
主线程main函数

Accepte _Acceptor(&handler); //异步接收器, handler是一个ACE_Task主动对象
  handler.activate();//

  _Acceptor.open(ACE_INET_Addr(Port), 0,1,5,1 ,ACE_Proactor::instance(), 1, 1);
  ACE_Proactor::instance()->proactor_run_event_loop();
 楼主| 发表于 2008-9-9 19:20:52 | 显示全部楼层
很简单,两种解决办法。
1、我推荐你把ACE_Proactor::instance()->proactor_run_event_loop();放到独立的线程中,而且线程数量是CPU * 2,充分使用CPU的能力。
主线程,使用ACE_Thread_Manager::instance()->wait()即可。
2、如果你一定要用这样的模式,在需要退出的代码里面,调用ACE_Proactor::instance()->proactor_end_event_loop();即可结束。但是你需要处理时序问题。不然会造成崩溃。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-4-29 02:48 , Processed in 0.011919 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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