java reactor notify_ACE_Reactor的notify阻塞问题

//t4l.cpp : Defines the entry point for the console application.//#include"stdafx.h"#include"ace/ACE.h"#include"ace/Reactor.h"#include"ace/Task_Ex_T.h"#include"ace/SOCK_Stream.h"#include"ace/SOCK_Acceptor.h"#include"ace/Sock_Connect.h"#include"ace/SOCK_Connector.h"#include"ace/Connector.h"#include"ace/Svc_Handler.h"#include"ace/OS.h"#include"rapidjson/document.h"#include"rapidjson/prettywriter.h"#include"rapidjson/stringbuffer.h"

classTestEvent

:public ACE_Task_Ex{public:virtual int handle_input (ACE_HANDLE fd =ACE_INVALID_HANDLE)

{

printf("handle_input\n");return 0;

}intputq()

{

ar_->notify(this);return 0;

}virtual int handle_output (ACE_HANDLE fd =ACE_INVALID_HANDLE)

{

printf("handle_output\n");return 0;

}virtual int handle_exception (ACE_HANDLE fd =ACE_INVALID_HANDLE)

{

size_++;

printf("handle_exception:%d\n", size_);if(is_sleep_)

{

ACE_OS::sleep(30);

is_sleep_= false;

}

ar_->remove_handler(this, ACE_Event_Handler::EXCEPT_MASK);return 0;

}virtual int handle_timeout (const ACE_Time_Value &current_time,const void *act = 0)

{

ACE_Time_Value atv(1,0);

ACE_OS::sleep(atv);//ar_->remove_handler(this, ACE_Event_Handler::EXCEPT_MASK);

ar_->cancel_timer(this);

printf("handle_timeout\n");return 0;

}virtual inthandle_close(ACE_HANDLE handle, ACE_Reactor_Mask close_mask)

{

printf("handle_close\n");return 0;

}intopen()

{

size_= 0;

is_sleep_= true;

ar_=ACE_Reactor::instance();

ar_->register_handler(this,ACE_Event_Handler::EXCEPT_MASK);

activate(THR_NEW_LWP| THR_JOINABLE |THR_INHERIT_SCHED ,1,0,ACE_DEFAULT_THREAD_PRIORITY);//ACE_OS::sleep(1);

for (int i= 0; i < 8900; i ++)

{//ACE_OS::sleep(1);

printf("opened:%d\n",i);

putq();

}

printf("opened\n");

ACE_Time_Value atv(1,0);

ACE_Reactor::instance()->schedule_timer(this, NULL, atv, atv);

printf("putq leave");return 0;

}intsvc()

{

ACE_Time_Value tv= ACE_Time_Value(1,0);

ar_->owner(ACE_Thread::self());//ar_->run_reactor_event_loop();

while (1)

{//ACE_Reactor::instance()->event_loop_done();

ar_->handle_events(&tv);

}return 0;

}private:

ACE_Reactor*ar_;

size_t size_;boolis_sleep_;

};classServer

:publicACE_Event_Handler

{public:int open(const char*addr)

{

ACE_INET_Addr ace_addr;if (-1 == ace_addr.set(addr,strlen(addr)))

{returnACE_OS::last_error();

}int ret =acceptor_.open(ace_addr);

reactor_= newACE_Reactor;this->reactor(reactor_);this->reactor()->register_handler(this, ACE_Event_Handler::ACCEPT_MASK);return 0;

}public:inthandle_input(ACE_HANDLE fd)

{

printf("connector(%d) comming\n", fd);

}

ACE_HANDLE get_handle()

{return this->acceptor_.get_handle();

}private:

ACE_SOCK_Acceptor acceptor_;

ACE_Reactor*reactor_;

};classConnectInst

:public ACE_Svc_Handler{public:

ConnectInst()

:timeout_(1000)

{

}~ConnectInst()

{

}private:inttimeout_;

};classClient

{public:intopen()

{

reactor_= newACE_Reactor;

connector_.open(reactor_);return 0;

}int connect(const char* addr, inttime)

{

ConnectInst*inst;int ret =connector_.connect(inst, ACE_INET_Addr(addr));

}private:

ACE_Connectorconnector_;

ACE_Reactor*reactor_;

};int main(int argc, char*argv[])

{

TestEvent* te = newTestEvent();

te->open();

ACE_Reactor::instance()->run_reactor_event_loop();

te->wait();

system("pause");return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值