加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ACE_Reactor中的handle_output

发布时间:2020-12-15 05:02:21 所属栏目:百科 来源:网络整理
导读:一直对ACE reactor framework中的handle_output困惑不解,而且个人觉得select是个很恶心的函数。 直到前段时间工作上需要用到网络编程,又把C++网络编程卷2找出来看看,写了几个小程序做实验才渐渐明白了reactor中都handle_output的触发条件。回想以前抱着书

一直对ACE reactor framework中的handle_output困惑不解,而且个人觉得select是个很恶心的函数。

直到前段时间工作上需要用到网络编程,又把C++网络编程卷2找出来看看,写了几个小程序做实验才渐渐明白了reactor中都handle_output的触发条件。回想以前抱着书看了很久就是懒得动手写代码,结果总是一知半解的,看来“实践出真知”一点都不假。

关于handle_output的小结:

当ACE_WFMO_Reactor回调到handle_output时你可以认为一直可写,直到写操作返回EWOULDBLOCK为止。如果socket一直都可以写,ACE_WFMO_Reactor只会调用一次handle_output。因为socket本身的状态没有发生改变,ACE_WFMO_Reactor不会将它放在待分派的事件源中。那么下一次调用handle_output会是什么时候呢?答案是socket从不可写状态变为可写。这就是所谓的“边缘触发方式”。

再来看看ACE_Select_Reactor。Select_Reactor基于BSD Socket的select系统函数,使用的是“水平触发方式”。也就是说,如果socket可写,ACE_Select_Reactor就会不停地调用handle_output,可以说它是比较勤快和公平的,呵呵。

下面是个简单的测试程序:echo服务器。你可以通过宏USE_SELECT_REACTOR来决定使用WFMO_Reactor还是Select_Reactor。

Technorati Tags: C++,ACE,network programming,select,reactor,WaitForMultipleObjects

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读