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中界面不被死锁住? 这样写有问题,不能用。
必须用线程解决,在另外的线程中,只要跑:
// Run the event loop.
ACE_Reactor::run_event_loop ();
就可以了。
退出的时候,要等待这个线程结束。 版主,用run_event_loop不行,用ACE_Reactor::Instance()-run_reactor_event_loop还是不行,线程还是在不停的循环执行,没有真正的停下来等待.
不会去看手册啊
1、hanlde_events()的参数中可以加超时的。2、如果我没记错的话ACE_OS::sleep()的参数单位是us,你加的那个sleep不跟没加一样!
再者,没你这么搞的,一般在事件循环驱动线程中都不能加sleep来延迟的,一般都是通过事件驱动的,没有事件的时候线程阻塞在handle_events()上。
页:
[1]