找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4405|回复: 3

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

[复制链接]
发表于 2008-3-14 15:33:40 | 显示全部楼层 |阅读模式
在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中界面不被死锁住?
发表于 2008-3-14 16:47:44 | 显示全部楼层
这样写有问题,不能用。
必须用线程解决,在另外的线程中,只要跑:
  // Run the event loop.
  ACE_Reactor::run_event_loop ();
就可以了。
退出的时候,要等待这个线程结束。
 楼主| 发表于 2008-3-14 17:58:31 | 显示全部楼层
版主,用run_event_loop不行,用ACE_Reactor::Instance()-run_reactor_event_loop还是不行,线程还是在不停的循环执行,没有真正的停下来等待.
发表于 2008-3-23 22:37:13 | 显示全部楼层

不会去看手册啊

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

再者,没你这么搞的,一般在事件循环驱动线程中都不能加sleep来延迟的,一般都是通过事件驱动的,没有事件的时候线程阻塞在handle_events()上。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-22 13:10 , Processed in 0.026323 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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