当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

ACE_Select_Reactor 1 ——入门

发表于: 2012-03-16   作者:acme_ltt   来源:转载   浏览:
摘要:     ACE Reactor 框架实现了Reactor模式,允许事件驱动的应用对源自许多不同事件源的事件做出反映,比如IO句柄,定时器,以及信号,应用重新定义框架所定义的挂钩方法。框架随机对其进行分派来处理事件,Reactor负责:(1)检查多路分离器来自各种事件源的、不同类型的连接和数据事件,(2)将这些事件分派给应用所定义的处理器,由它进行处理。   &nbs

    ACE Reactor 框架实现了Reactor模式,允许事件驱动的应用对源自许多不同事件源的事件做出反映,比如IO句柄,定时器,以及信号,应用重新定义框架所定义的挂钩方法。框架随机对其进行分派来处理事件,Reactor负责:(1)检查多路分离器来自各种事件源的、不同类型的连接和数据事件,(2)将这些事件分派给应用所定义的处理器,由它进行处理。

    反应式服务器响应来自一个或多个事件源的时间,在理想情况下,对时间的响应会足够快,以使所有请求看起来像是被同时处理的,尽管事件处理通常是由单个线程处理的。同步事件多路分离器位于各个反应式服务器的心脏处。这种机制检测源自许多事件源的事件并对其作出响应,从而同步地使事件作为服务器正常执行路径的一部分提供给服务器。

    select()函数是最为常见的同步事件多路分离器。这个系统函数在同一组IO句柄上等待指定的事件发生,当一个或者是多个IO句柄开始活动时,或是在指定的时间过去后,select函数就会返回。

    ACE_Select_Reactor是ACE_Reactor接口的一种实现,它使用select同步时间多路分离器函数来检测IO和定时器事件,除了支持ACE_Reactor接口的所有特性外,ACE_Select_Reactor类还提供了以下能力:

    1、它支持重入的反应器调用,应用可以从正在由统一反应器分派的事件处理器中调用handle_event方法;

    2、它可以被配置为同步化的或异步化的,在线程安全性和降低开销之间进行折中;

    3、它在再次调用select函数之前,分派其句柄集中的所有活动句柄,从而保证了公正性。

 

 

#include "ace/streams.h"
#include "ace/Reactor.h"
#include "ace/Select_Reactor.h"
#include "ace/Thread_Manager.h"

#include <string>

#include "Reactor_Logging_Server_T.h"
#include "Logging_Acceptor_Ex.h"

typedef Reactor_Logging_Server<Logging_Acceptor_Ex>
        Server_Logging_Daemon;


static ACE_THR_FUNC_RETURN event_loop (void *arg) 
{
  ACE_Reactor *reactor = static_cast<ACE_Reactor *> (arg);

  reactor->owner (ACE_OS::thr_self ());
  reactor->run_reactor_event_loop ();
  return 0;
}


static ACE_THR_FUNC_RETURN controller (void *arg) 
{
  for (;;) 
  {
    std::string user_input;
    std::getline (cin, user_input, '\n');
    if (user_input == "quit") 
    {
      break;
    }
  }
  return 0;
}


int main(int argc,char **argv)
{
  ACE_Select_Reactor select_reactor;
  ACE_Reactor reactor (&select_reactor);

  Server_Logging_Daemon *server;
  // Ignore argv[0]...
  --argc; ++argv;
  ACE_NEW_RETURN (server,
                  Server_Logging_Daemon (argc, argv, &reactor),
                  1);
  ACE_Thread_Manager::instance ()->spawn (event_loop, &reactor);
  ACE_Thread_Manager::instance ()->spawn (controller, &reactor);
  return ACE_Thread_Manager::instance ()->wait ();
}

    在上面的代码中,在51行,由ACE_Thread_Manager单体派生一个线程,并让其运行event_loop()函数,在52行,由ACE_Thread_Manager单体派生一个线程,让其运行controller()函数。

    在从main函数返回之前,等待其他两个线程推出,ACE_Thread_Manager:wait()还会收取两个线程的退出状态,以免内存泄漏。

ACE_Select_Reactor 1 ——入门

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
ACE_Reactor在windows上默认不是使用ACE_Select_Reactor,而是ACE_WFMO_Reactor(封装了WaitForMult
一、Intent介绍 如果Android要做什么事件,则肯定与Intent有关;Intent能够做的动作有很多,比如打
一、Intent介绍 如果Android要做什么事件,则肯定与Intent有关;Intent能够做的动作有很多,比如打
项目中导入jar包: 实体类:Student: package com.entity; public class Student { private String
Java 社区一直试图将 POJO 的作用发挥到极致,降低 Java 应用实现的难度,最近的尝试是将 EJB3.0 建
第一步:安装cocos2d 从http://www.cocos2d-iphone.org/download下载cocos2d模 板,建议下在稳定的
1、安装Python (1)我使用的的Mac OS X系统,系统已经预装了Python,直接在终端输入 Python,若出
我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信。上
1、jna是什么 jna是java native access的简称,用他可以调用C、C++代码,特别是windows中强大的库文
前言   这是前段时间用于公司Android入门培训的资料,学习Android三周时间收集整理的,时间仓促,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号