|
有两个类:
class Client:public ACE_Event_Handler
class RecvFile_Handle:public ACE_Event_Handler
现在的情况时,但客户端收到一个消息的时候,会自动回调Client:: handle_input(ACE_HANDLE fd = ACE_INVALID_HANDLE);
但我接受到一个指定的消息,
我想暂时将Client这个事件处理器挂起,然后将RecvFile_Handle登记进反应器,都是READ_MASK
大致代码如下:- int RecvFile_Handle::open()
- {
- return reactor()->register_handler(this,ACE_Event_Handler::READ_MASK);
- }
- int RecvFile_Handle::handle_input(ACE_HANDLE fd /* = ACE_INVALID_HANDLE */)
- {
- std::cout<<"现在由RecvFile_Handle处理消息"<<std::endl;
- return 1;
- }
复制代码 在Client::handle_input()中- case FILE_START_TYPE:
- ACE_NEW_RETURN(recvfile_handler_,RecvFile_Handle(reactor()),-1);
- if (-1==recvfile_handler_->open())
- {
- return -1;
- }
- reactor()->resume_handler(this);
复制代码 可是为什么下一次接受进来的数据不能自动回调RecvFile_Handle::handle_input(ACE_HANDLE fd /* = ACE_INVALID_HANDLE */)
我调试,发现return reactor()->register_handler(this,ACE_Event_Handler::READ_MASK);返回-1;
我使用的是ACE_WFMO_Reactor
请高手指教!谢谢 |
|