ACE Proactor框架使用实例

本文详细介绍了如何使用ACE Proactor框架实现并发IO操作,包括派生自ACE_Service_Handler的HA_Proactive_Service类的实现,以及如何将其应用于Asynch_Connector和Asynch_Acceptor中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ACE Proactor框架使用实例

首先你因该针对你应用从ACE_Service_Handler派生:
#include <ace/Asynch_IO.h>
#include <ace/Message_Block.h>
#include <ace/OS.h>

class HA_Proactive_Service : public ACE_Service_Handler
{
private:
    ACE_Asynch_Read_Stream reader_;
    ACE_Asynch_Write_Stream writer_;
public:
    ~HA_Proactive_Service()
    {
        if (this->handle() != ACE_INVALID_HANDLE)
            ACE_OS::closesocket(this->handle());
    }

    virtual void open(ACE_HANDLE new_handle, ACE_Message_Block &message_block)
    {
        this->handle(new_handle);//新的socket句柄产生了,我们在析构函数里管理了它
        if (this->reader_.open(*this) != 0 ||
            this->writer_.open(*this) != 0)
        {
            ACE_ERROR((LM_ERROR,
                    ACE_TEXT("%p\n"),
                    ACE_TEXT("HA_Proactive_Service open")));
            delete this;
            return;
        }
        //你可以在这里用this->reader_读数据,或者用this->writer_写数据
        //这就是步骤的第一步(发起I/O操作)
        //。。。

        return;
    }

    // This method will be called when an asynchronous read
    // completes on a stream.
    virtual void handle_read_stream(const ACE_Asynch_Read_Stream::Result &result)
    {
          //数据读完了,我取得了读到的数据mb
          ACE_Message_Block& mb = result.message_block();
          //怎么处理这些数据呢,你看着办吧。
          //。。。

          return;
    }

    // This method will be called when an asynchronous write
    // completes on a stream.
    virtual void handle_write_stream(const ACE_Asynch_Write_Stream::Result &result)
    {
        //数据写完了,你该释放消息块。
        result.message_block().release();

        //。。。

       return;   
    }
   
    //还可重载更多回调函数
};

你可以Asynch_Connector和Asynch_Acceptor都依赖HA_Proactive_Service(确切的说是ACE_Service_Handler,HA_Proactive_Service派生自ACE_Service_Handler),所以HA_Proactive_Service可以分成两个不同类,分别根据需要为Asynch_Connector和Asynch_Acceptor服务(这里只是合二为一做示例)。
Asynch_Connector是这样的:
#include <ace/INET_Addr.h>
#include <ace/Proactor.h>
#include <ace/Asynch_Connector.h>
#include "HA_Proactive_Service.h"

ACE_INET_Addr peer_addr(50000, ACE_LOCALHOST); // Set up peer addr
ACE_Asynch_Connector<HA_Proactive_Service> aio_connect;
aio_connect.connect(peer_addr);

ACE_Proactor::instance()->proactor_run_event_loop ();

Asynch_Acceptor是这样的:

#include <ace/INET_Addr.h>
#include <ace/Proactor.h>
#include <ace/Asynch_Acceptor.h>
#include "HA_Proactive_Service.h"
ACE_INET_Addr peer_addr(50000, ACE_LOCALHOST); // Set up peer addr
Asynch_Acceptor<HA_Proactive_Service> aio_acceptor
aio_acceptor.open(peer_addr);

ACE_Proactor::instance()->proactor_run_event_loop ();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值