rocmike 发表于 2008-3-14 15:33:40

ACE_Reactor::instance()->handle_events()阻塞住了界面,如何处理?

在windows程序下写的程序,如果调用
ACE_Reactor::instance()->handle_events();
则会阻塞住界面,什么事情都做不了,消息也不能接收.

试过用线程解决,但是在如下的线程代码中,
virtual int svc(void)
{
while(m_bStopFlag)
{
   ACE_OS::sleep(1);
   ACE_Reactor::instance()->handle_events();
}
return 0;
}
ACE_Reactor::instance()->handle_events();会不断的循环执行,导致了真正有连接发生时handle_input等事件都不会被执行.

请问高手们,如何保证windows中界面不被死锁住?

peakzhang 发表于 2008-3-14 16:47:44

这样写有问题,不能用。
必须用线程解决,在另外的线程中,只要跑:
// Run the event loop.
ACE_Reactor::run_event_loop ();
就可以了。
退出的时候,要等待这个线程结束。

rocmike 发表于 2008-3-14 17:58:31

版主,用run_event_loop不行,用ACE_Reactor::Instance()-run_reactor_event_loop还是不行,线程还是在不停的循环执行,没有真正的停下来等待.

blazewater 发表于 2008-3-23 22:37:13

不会去看手册啊

1、hanlde_events()的参数中可以加超时的。
2、如果我没记错的话ACE_OS::sleep()的参数单位是us,你加的那个sleep不跟没加一样!

再者,没你这么搞的,一般在事件循环驱动线程中都不能加sleep来延迟的,一般都是通过事件驱动的,没有事件的时候线程阻塞在handle_events()上。
页: [1]
查看完整版本: ACE_Reactor::instance()->handle_events()阻塞住了界面,如何处理?