peakzhang 发表于 2008-9-9 19:20:41

请教结束 ACE_Proactor ?

我在主线程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();

peakzhang 发表于 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();即可结束。但是你需要处理时序问题。不然会造成崩溃。
页: [1]
查看完整版本: 请教结束 ACE_Proactor ?