ACE 问题探讨

来源:互联网 发布:apache缓存 编辑:程序博客网 时间:2024/04/28 03:57

1关于在不同线程当中启用run_event_loop()的问题,调用线程必须在调用该函数之前使用ACE_Reactor::instance()->owner(ACE_Thread::self());来获得当前线程的控制权限才能继续的进行事件分发。TP_Reactor不会有问题。 

 2停止事件循环的问题。

while (bStart)

                   {

 

                            iEvent = ACE_Reactor::instance()->handle_events();

                   }

我们需要手动给ACE_Reactor::instance()->handle_events();

加一个循环,否则,此函数只进行一次分发就会返回。主意此函数可以设置阻塞时间,如果不设置默认为永远阻塞,所以如果你希望让此函数返回的时候需要从你的ACE_Event_HandlerD队列中移除一个对象比如使用ACE_Reactor::instance()->remove_handler,这样就可以使ACE_Reactor::instance()->handle_events();返回。

3考虑不周的Reactor Notify机制

这也应该是一个BUGReactor Notify的代码有考虑不周的地方。Notify机制的本质是提供了一条消息队列让大家有方法调用Event_handler,但是存在一种可能,在你的通知消息在消息队列的时候,Event_hanlder由于后面的处理可能已经handle_close了。但是ACEdispatch_notify却没有考虑倒这一点(或者说考虑倒这一点也不好解决)。

ACE_Select_Reactor_Notify::dispatch_notify函数的代码。

 

int

ACE_Select_Reactor_Notify::dispatch_notify (ACE_Notification_Buffer &buffer)

{

ACE_Event_Handler *event_handler =

        buffer.eh_;

 

      bool const requires_reference_counting =

        event_handler->reference_counting_policy ().value () ==

        ACE_Event_Handler::Reference_Counting_Policy::ENABLED;

             //如果此时这个ACE_Event_Handler已经被handle_close了,也就时删除了此对象,狠容易引起崩溃。

      switch (buffer.mask_)

        {

        case ACE_Event_Handler::READ_MASK:

        case ACE_Event_Handler::ACCEPT_MASK:

          result = event_handler->handle_input (ACE_INVALID_HANDLE);

这个bug5.6.1还没有解决。我觉得这个问题是可以解决的,ACE自己再其中可以提供一个删除对象的方法,并在这个方法中进行同步和错误的判断。

而我现在的做法是设置一个TIMER 让ACE去调用汉handle_timeout的时候再来删除所注册的对象。

4 ACE ACE_Reactor::instance()->schedule_timer(this, 0,
    ACE_Time_Value(1));
如果修改系统时间,比如向前调一段时间,TIMER的触发时按照设置时间的时间点往后加一段时间,所以如果设置1分钟后触发,但此时修改了系统时间向前调了1分钟,这样只有CPU时间的两分钟后才会触发。但如果系统时间向后调,则不会发生影响。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二年级的孩子不爱学习怎么办 孩子不爱学习怎么办二年级 二年级孩子不爱写作业怎么办 孩子喜欢的朋友家长不喜欢怎么办? 孩子不喜欢上幼儿园家长怎么办 孩子不喜欢家长学佛怎么办呢? 学生家长讨厌老师老师该怎么办 孩子不爱去幼儿园总是哭怎么办 孩子学习一点都不主动怎么办 孩子怕老师不想上学怎么办 幼儿园孩子怕老师不想上学怎么办 孩子在幼儿园怕老师怎么办 幼儿园老师对孩子有歧视怎么办 儿子在幼儿园受到老师歧视怎么办 我把老师骂了怎么办 孩子讨厌老师骂老师怎么办 幼儿园老师讨厌一个孩子怎么办 幼儿园老师对孩子不好怎么办 高中分班讨厌班主任怎么办 把孩子老师惹了怎么办 高三班主任第一节课应该怎么办 高三孩子与班主任不和怎么办 孩子很害怕一件事怎么办 吼完孩子觉得很害怕怎么办 小朋友在幼儿园被欺负怎么办 老师总找孩子茬怎么办 小孩说幼儿园老师不喜欢她怎么办 小孩在学校老师不喜欢怎么办 好哭的孩子老师怎么办 小孩哭的犟住怎么办 2-3小孩脾气很犟怎么办 生了孩子没奶怎么办 二年级孩子写作业慢怎么办 六年级下册数学解决问题差的怎么办 孩子五年级了学习成绩不好怎么办 孩子做错事不承认怎么办 二年级小孩拼音差怎么办 小学三年级数学60多分怎么办 孩子三年级了数学不开窍怎么办 初二数学太差该怎么办 孩子语文阅读理解能力差怎么办