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

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

发布时间:2020-12-15 05:26:06 所属栏目:百科 来源:网络整理
导读://file: main.cpp//author: StoneJiang http://www.tao-studio.net//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
//file: main.cpp
//author: StoneJiang  http://www.tao-studio.net
//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 int> count_;
};


int
ACE_TMAIN (int,ACE_TCHAR *[])
{
    ACE_DEBUG ((LM_DEBUG,"(%t|%P) work starup/n"));
    ACE_Proactor::close_singleton (); 

    ACE_WIN32_Proactor *impl = new ACE_WIN32_Proactor (0,1); 
    ACE_Proactor::instance (new ACE_Proactor (impl,1),1);

     ACE_Reactor::instance ()->register_handler(impl,impl->get_handle ());

    Timeout_Handler handler;
    // Register a 2 second timer.
    ACE_Time_Value foo_tv (2);
    if (ACE_Proactor::instance()->schedule_timer (handler,(void *) "Proactor",ACE_Time_Value::zero,foo_tv) == -1)
        ACE_ERROR_RETURN ((LM_ERROR,"%p/n","schedule_timer"),-1);

    // Register a 3 second timer.
    ACE_Time_Value bar_tv (3);
    if (ACE_Reactor::instance ()->schedule_timer (&handler,(void *) "Reactor",bar_tv) == -1)
        ACE_ERROR_RETURN ((LM_ERROR,-1);


    ACE_Reactor::instance()->run_event_loop();
    ACE_Reactor::instance ()->remove_handler (impl,ACE_Event_Handler::DONT_CALL);
    ACE_DEBUG ((LM_DEBUG,"(%t|%P) work complete/n"));
    return 0;
}


完成源代码下载download

转贴:http://blog.csdn.net/focusonace/article/details/3514570

(编辑:李大同)

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

    推荐文章
      热点阅读