`
pleasetojava
  • 浏览: 729536 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

把Proactor与Reactor事件集成的演示代码

阅读更多
//file: main.cpp
//author: StoneJiang <jiangtao> http://www.tao-studio.net</jiangtao>
//date: 2008-12-14
//desc: Integrating Proactor and Reactor Events on Windows


#include "ace/Proactor.h"
#include "ace/WIN32_Proactor.h"
#include "ace/Atomic_Op.h"
#include "ace/OS_NS_unistd.h"
 
#include "ace/Reactor.h"
#include "ace/Time_Value.h"

class Timeout_Handler : public ACE_Handler, public ACE_Event_Handler
{
    // = TITLE
    //     Generic timeout handler.

public:
    Timeout_Handler (void)
    {
    }

    // This is called by the Proactor. This is declared in ACE_Handler.
    virtual void handle_time_out (const ACE_Time_Value &tv,
        const void *arg)
    {
        // Print out when timeouts occur.
        ACE_DEBUG ((LM_DEBUG, "(%t|%P) %d timeout occurred for %s @ %d.\n",
            ++count_,
            (char *) arg,
            tv.sec ()));

        // Since there is only one thread that can do the timeouts in
        // Reactor, lets keep the handle_timeout short for that
        // thread.
        if (ACE_OS::strcmp ((char *) arg, "Proactor") == 0)
            // Sleep for a while
            ACE_OS::sleep (1);
    }

    // This method is declared in ACE_Event_Handler.
    virtual int handle_timeout (const ACE_Time_Value &tv,
        const void *arg)
    {
        this->handle_time_out (tv, arg);
        return 0;
    }

private:
    ACE_Atomic_Op <ace_thread_mutex style="color: #0000ff">int&gt; count_;
};


<span style="color: #0000ff">int</span>
ACE_TMAIN (<span style="color: #0000ff">int</span>, ACE_TCHAR *[])
{
    ACE_DEBUG ((LM_DEBUG, "<span style="color: #8b0000">(%t|%P) work starup\n</span>"));
    ACE_Proactor::close_singleton (); 

    ACE_WIN32_Proactor *impl = <span style="color: #0000ff">new</span> ACE_WIN32_Proactor (0, 1); 
    ACE_Proactor::instance (<span style="color: #0000ff">new</span> ACE_Proactor (impl, 1), 1);

     ACE_Reactor::instance ()-&gt;register_handler(impl, impl-&gt;get_handle ());

    Timeout_Handler handler;
    <span style="color: #008000">// Register a 2 second timer.</span>
    ACE_Time_Value foo_tv (2);
    <span style="color: #0000ff">if</span> (ACE_Proactor::instance()-&gt;schedule_timer (handler,
        (<span style="color: #0000ff">void</span> *) "<span style="color: #8b0000">Proactor</span>",
        ACE_Time_Value::zero,
        foo_tv) == -1)
        ACE_ERROR_RETURN ((LM_ERROR, "<span style="color: #8b0000">%p\n</span>", "<span style="color: #8b0000">schedule_timer</span>"), -1);

    <span style="color: #008000">// Register a 3 second timer.</span>
    ACE_Time_Value bar_tv (3);
    <span style="color: #0000ff">if</span> (ACE_Reactor::instance ()-&gt;schedule_timer (&amp;handler,
        (<span style="color: #0000ff">void</span> *) "<span style="color: #8b0000">Reactor</span>",
        ACE_Time_Value::zero,
        bar_tv) == -1)
        ACE_ERROR_RETURN ((LM_ERROR, "<span style="color: #8b0000">%p\n</span>", "<span style="color: #8b0000">schedule_timer</span>"), -1);


    ACE_Reactor::instance()-&gt;run_event_loop();
    ACE_Reactor::instance ()-&gt;remove_handler (impl,
        ACE_Event_Handler::DONT_CALL);
    ACE_DEBUG ((LM_DEBUG, "<span style="color: #8b0000">(%t|%P) work complete\n</span>"));
    <span style="color: #0000ff">return</span> 0;
}</ace_thread_mutex>
完成源代码下载download
分享到:
评论

相关推荐

    p401 - p418 proactor -Reactor模型

    Proactor-Reactor 模式详解 Proactor-Reactor 模式是高性能服务器设计的核心思想之一,它们都是基于 I/O 多路复用的技术实现的。下面我们来详细了解 Proactor-Reactor 模式的设计思想和实现机理。 问题背景 在...

    Proactor和Reactor模式_继续并发系统设计的扫盲[参照].pdf

    在并发系统设计中,Proactor和Reactor模式是两种常用的设计模式,它们主要用来处理I/O操作的事件派发和分离。这两种模式都是为了提高系统的并发能力,优化资源利用,但它们在处理I/O事件的方式上有所不同。 首先,...

    tpd_reactor_proactor.pdf

    Reactor 和 Proactor 模式是两种常见的事件处理模式,在网络编程中广泛应用于设计高效、可靠的并发和网络应用程序。在本文中,我们将详细介绍 Reactor 和 Proactor 模式的概念、特点、优缺点,以及在网络编程中的...

    ACE Reactor 和proactor 通信方式两套代码

    本人学习ACE 时候写的关于两种通信方式的实例代码,我把三个连写都写在了一个文件,根据需要注释掉其他的就行。 ACE用于开发通信程序非常方便,尤其相对于WinSock 来说,可以省很多代码,普通程序员也更容易理解

    Proactor模式&Reactor模式详解

    本文旨在详细介绍这些I/O模型,并着重解析Reactor模式与Proactor模式的设计思想及其应用场景。 #### 二、同步阻塞I/O (Blocking I/O) 同步阻塞I/O是最基本且最直观的I/O处理方式。在这种模式下,应用程序发出I/O...

    ACE_Proactor网络通信示例代码

    ACE_Proactor是ACE库中的一个核心组件,它提供了一种异步事件处理机制,使得开发者可以编写非阻塞的、高性能的网络应用。这个压缩包包含的是一组使用ACE_Proactor实现TCP通信的示例代码,我们可以从这些文件中学习到...

    ACE_Proactor TCP协议通信示例代码

    ACE_Proactor是一个高级事件处理库,它为C++程序员提供了异步I/O操作的抽象,包括TCP协议的网络通信。这个示例代码是关于如何利用ACE_Proactor库来实现TCP协议的客户端和服务器端通信。下面我们将深入探讨相关知识点...

    actor和proactor模式1

    `Proactor`模式是一种异步I/O处理模式,与传统的`Reactor`模式(同步I/O)相对。在`Reactor`模式中,I/O操作完成后,事件多路分离器会通知处理器,然后处理器执行实际的读写操作。而在`Proactor`模式中,处理器发起...

    C和C++实现和封装不同的网络 IO 模型源码(如 epoll、reactor、io_uring 和 proactor).zip

    C和C++实现和封装不同的网络 IO 模型源码(如 epoll、reactor、io_uring 和 proactor).zip 【说明】 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请...

    Windows下采用IOCP实现的ACE的Proactor框架剖析

    **Windows下的IOCP(I/O完成端口)与ACE Proactor框架** IOCP(I/O完成端口,Input/Output Completion Port)是Windows操作系统提供的一种高效、可扩展的异步I/O模型。它允许应用程序处理大量的并发I/O操作,特别...

    ACE Reactor相关的知识

    Reactor 负责维护事件处理器与事件类型的关联,并在事件发生时调用相应的 "handle_" 方法。 使用 ACE Reactor 的基本步骤包括: 1. 创建事件处理器子类,继承自 ACE_Event_Handler,实现对应事件的 "handle_" 方法...

    Proactor.pdf

    Proactor An Object Behavioral Pattern for Demultiplexing and Dispatching Handlers for Asynchronous Events.pdf

    C++高性能编程之proactor模式代码示例

    C++高性能并发编程之proactor模式应用实例,应用于网络编程领域,包含一下几个部分: 1 服务器端程序:一个server代码展示如何使用现代C++11编程高并发代码,一个Makefile文件 2 客户端程序:一个客户端代码展示如何...

    对ACE的Proactor通讯模式的全面封装

    Proactor模式是ACE库中提供的一种异步事件处理模型,它允许程序在非阻塞方式下处理I/O操作,提高了系统的并发处理能力。本封装主要目的是使开发者能够在不直接接触ACE底层细节的情况下,利用Proactor模式实现高效的...

    ACE服务器 全面开源

    很全面的ACE服务器,包括proactor、reactor模式

    Network Pattern

    Proactor模式与Reactor模式类似,也是事件驱动的,但其主要区别在于它是异步操作的。在Proactor模式中,I/O操作不是由事件处理器直接完成,而是由操作系统在后台异步执行,完成后通过回调函数通知处理器。这样,...

    cpp-利用C编写的HTTP服务器使用线程池Reactor模式

    在Reactor模式中,一个中心对象(Reactor)负责监听多个套接字的事件,并根据事件类型分派相应的处理器来处理。这种模式使得服务器可以同时处理多个连接,极大地提高了并发能力。在HTTP服务器中,Reactor模式通常与...

    非阻塞IO+Proactor+日志系统 自定义协议服务器.zip

    与传统的异步I/O(如回调函数)不同,Proactor模式通过事件通知机制来处理I/O完成,而不是等到I/O操作完成后回调。当I/O操作准备好时,操作系统会将完成信号放入完成队列,由事件循环检测并处理这些事件,这样可以...

    reactor-demo

    在IT行业中,Reactor模式是一种常见的并发编程设计模式,它...在实践中,你还可以进一步探讨如何利用多线程、异步IO或者其他并发模型来增强Reactor的性能,例如使用Proactor模式(异步事件驱动)或者结合Actor模型等。

Global site tag (gtag.js) - Google Analytics