本文整理汇总了C++中ACE_Reactor::register_handler方法的典型用法代码示例。如果您正苦于以下问题:C++ ACE_Reactor::register_handler方法的具体用法?C++ ACE_Reactor::register_handler怎么用?C++ ACE_Reactor::register_handler使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ACE_Reactor
的用法示例。
在下文中一共展示了ACE_Reactor::register_handler方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: server_events
int
main (int, char *[])
{
// Instantiate a server which will receive messages for DURATION
// seconds.
Server_Events server_events (UDP_PORT,
MCAST_ADDR,
DURATION);
// Instance of the ACE_Reactor.
ACE_Reactor reactor;
if (reactor.register_handler (&server_events,
ACE_Event_Handler::READ_MASK) == -1)
ACE_ERROR ((LM_ERROR,
"%p\n%a",
"register_handler",
1));
ACE_DEBUG ((LM_DEBUG,
"starting up server\n"));
for (;;)
reactor.handle_events (server_events.wait_time ());
ACE_NOTREACHED (return 0;)
}
示例2: defined
int
ACE_Process_Manager::append_proc (ACE_Process *proc)
{
ACE_TRACE ("ACE_Process_Manager::append_proc");
// Try to resize the array to twice its existing size if we run out
// of space...
if (this->current_count_ >= this->max_process_table_size_
&& this->resize (this->max_process_table_size_ * 2) == -1)
return -1;
else
{
ACE_Process_Descriptor &proc_desc =
this->process_table_[this->current_count_];
proc_desc.process_ = proc;
proc_desc.exit_notify_ = 0;
#if defined (ACE_WIN32)
// If we have a Reactor, then we're supposed to reap Processes
// automagically. Get a handle to this new Process and tell the
// Reactor we're interested in <handling_input> on it.
ACE_Reactor *r = this->reactor ();
if (r != 0)
r->register_handler (this,
proc->gethandle ());
#endif /* ACE_WIN32 */
this->current_count_++;
return 0;
}
}
示例3: sockmc_addr
Handle_Events::Handle_Events (u_short udp_port,
const char *ip_addr,
const char *interface,
ACE_Reactor &reactor)
{
// Create multicast address to listen on.
ACE_INET_Addr sockmc_addr (udp_port, ip_addr);
// subscribe to multicast group.
if (this->mcast_.subscribe (sockmc_addr, 1, interface) == -1)
ACE_OS::perror ("can't subscribe to multicast group"), ACE_OS::exit (1);
// Disable loopbacks.
// if (this->mcast_.set_option (IP_MULTICAST_LOOP, 0) == -1 )
// ACE_OS::perror (" can't disable loopbacks " ), ACE_OS::exit (1);
if (!QUIET) {
this->handle_set_.set_bit (0);
}
this->handle_set_.set_bit (this->mcast_.get_handle ());
// Register callbacks with the ACE_Reactor.
if (reactor.register_handler (this->handle_set_,
this,
ACE_Event_Handler::READ_MASK) == -1)
ACE_OS::perror ("can't register events"), ACE_OS::exit (1);
}
示例4: if
Dispatch_Count_Handler::Dispatch_Count_Handler (void)
{
ACE_Reactor *r = ACE_Reactor::instance ();
this->input_seen_ = this->notify_seen_ = 0;
this->timers_fired_ = 0;
// Initialize the pipe.
if (this->pipe_.open () == -1)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("ACE_Pipe::open")));
// Register the "read" end of the pipe.
else if (r->register_handler (this->pipe_.read_handle (),
this,
ACE_Event_Handler::READ_MASK) == -1)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("register_handler")));
// Put something in our pipe and smoke it... ;-)
else if (ACE::send (this->pipe_.write_handle (),
"z",
1) == -1)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("send")));
// Call notify to prime the pump for this, as well.
else if (r->notify (this) == -1)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("notify")));
}
示例5:
int
Server_i::enable_multicast (const char *ior)
{
if (this->parse_args (this->argc_, this->argv_) != 0)
return -1;
// Get reactor instance from TAO.
ACE_Reactor *reactor =
this->orb_->orb_core ()->reactor ();
// Instantiate a handler which will handle client requests for the
// bootstrappable service, received on the multicast port.
ACE_NEW_RETURN (this->ior_multicast_,
TAO_IOR_Multicast (),
-1);
if (this->ior_multicast_->init (ior,
this->mcast_address_.in (),
TAO_SERVICEID_MCASTSERVER) == -1)
return -1;
// Register event handler for the ior multicast.
if (reactor->register_handler (this->ior_multicast_,
ACE_Event_Handler::READ_MASK) == -1)
{
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"MCast_Server: cannot register Event handler\n"));
return -1;
}
return 0;
}
示例6:
Sig_Handler_1 (ACE_Reactor &reactor, const char *msg)
: msg_ (msg),
count_ (0),
reactor_ (reactor)
{
// Register the signal handlers.
this->quit_sigkey_ =
reactor.register_handler (SIGQUIT, this);
this->int_sigkey_ =
reactor.register_handler (SIGINT, this);
if (this->quit_sigkey_ == -1 || this->int_sigkey_ == -1)
ACE_ERROR ((LM_ERROR,
"%p\n",
"register_handler"));
}
示例7: registerDgramHandlers
int HandlersRegister::registerDgramHandlers ()
{
int i;
// open dgram handlers for all ports
for (i = 0; i < HandlersNo; ++i)
if (-1 == DgramHandlers_[ i ]->open (
ACE_INET_Addr (i + BaseDgramPort,
ACE_TEXT ("127.0.0.1"),
ACE_PROTOCOL_FAMILY_INET)))
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT (" (%P) %p\n"),
ACE_TEXT ("Cannot open dgram handler")),
-1);
// register dgram handlers
for (i = 0; i < HandlersNo; ++i)
if (-1 == reactor_->register_handler (DgramHandlers_[ i ],
ACE_Event_Handler::READ_MASK))
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT (" (%P) %p\n"),
ACE_TEXT ("Cannot register dgram handler")),
-1);
return 0;
}
示例8: svc
int MyTask::svc()
{
ACE_DEBUG ((LM_INFO, ACE_TEXT ("(%t) enter MyTask::svc()\n\n")));
//initialization
selector = new ACE_Select_Reactor;
ACE_Reactor* reactor = new ACE_Reactor(selector);
ACE_Reactor::instance(reactor); //then, ACE_Reactor::instance() is reactor
this->reactor(reactor); //this reactor_ of ACE_Event_Handler can not be set
//register socket handler
Handler handler(UDP_PORT);
if (reactor->register_handler(&handler, ACE_Event_Handler::READ_MASK) == -1)
{
ACE_ERROR((LM_ERROR, "%p\n", "cant't register with Reactor in MyTask::svc()\n"));
return -1;
}
//spawn mytask2
mytask2::instance()->open(&handler);
//handle_events in forever-loop until receive two data packets from socket, then, it will notify the MY_EXIT_HANDLER
while (exit_flag == 0)
{
int result = reactor->handle_events(); //timeout will not occur at all
if (result)
{
ACE_DEBUG ((LM_INFO, ACE_TEXT ("(%t) handle_events() succeed, result = %d\n\n"), result));
if (RECV_COUNT == handler.get_count())
{
ACE_DEBUG ((LM_INFO, ACE_TEXT ("(%t) MyTask::svc() notify the exit handler\n")));
ACE_Reactor::instance()->notify(&handler, ACE_Event_Handler::EXCEPT_MASK);
}
if (handler.get_flag())
exit_flag = 1;
}
else
{
ACE_ERROR((LM_ERROR, "%p\n", "handle_events() failed\n"));
return -1;
}
}
if (reactor->remove_handler(&handler, ACE_Event_Handler::READ_MASK |
ACE_Event_Handler::DONT_CALL) == -1)
{
ACE_ERROR((LM_ERROR, "%p\n", "cant't remove handler from Reactor\n"));
return -1;
}
delete reactor;
reactor = NULL;
ACE_DEBUG ((LM_INFO, ACE_TEXT ("(%t) exit MyTask::svc()\n\n")));
return 0;
}
示例9: callback
static void
run_svc (ACE_HANDLE handle)
{
// The <callback> object is an <ACE_Event_Handler> created on the
// stack. This is normally not a good idea, but in this case it
// works because the ACE_Reactor is destroyed before leaving this
// scope as well, so it'll remove the <callback> object from its
// internal tables BEFORE it is destroyed.
Ping_Pong callback (string_name, handle);
// Note that we put the <reactor> AFTER the <callback> so that the
// <reactor> will get shutdown first.
ACE_Reactor reactor;
// Register the callback object for the various I/O, signal, and
// timer-based events.
if (reactor.register_handler (&callback,
ACE_Event_Handler::READ_MASK
| ACE_Event_Handler::WRITE_MASK) == -1
#if !defined (CHORUS)
|| reactor.register_handler (SIGINT,
&callback) == -1
#endif /* CHORUS */
|| reactor.schedule_timer (&callback,
0,
SHUTDOWN_TIME) == -1)
{
ACE_ERROR ((LM_ERROR,
"%p\n",
"reactor"));
ACE_OS::exit (1);
}
// Main event loop (one per process).
while (callback.is_set () == 0)
if (reactor.handle_events () == -1)
ACE_ERROR ((LM_ERROR,
"%p\n",
"handle_events"));
}
示例10: while
int
ACE_TMAIN (int, ACE_TCHAR *[])
{
int result = reactor.register_handler (&simple_handler,
simple_handler.event1_.handle ());
ACE_ASSERT (result == 0);
result = reactor.register_handler (&simple_handler,
simple_handler.event2_.handle ());
ACE_ASSERT (result == 0);
result = ACE_OS::thr_create ((ACE_THR_FUNC) worker, 0, 0, 0);
ACE_ASSERT (result == 0);
result = 0;
while (!stop_test && result != -1)
{
result = reactor.handle_events ();
}
return 0;
};
示例11: xreactor
int
main (int argc, char**argv)
{
// The worlds most useless user interface
Widget top_level = XtVaAppInitialize (NULL,
"buttontest",
NULL,
0,
&argc,
argv,
NULL,
NULL);
Widget button = XmCreatePushButton (top_level,
"change",
0,
0);
XtManageChild (button);
XtAddCallback (button,
XmNactivateCallback,
ActivateCB,
NULL);
// A reactor beastie.
ACE_XtReactor xreactor (XtWidgetToApplicationContext (top_level));
ACE_Reactor reactor (&xreactor);
// Print a message when data is recv'd on stdin...
ACE_Event_Handler *stdin_;
ACE_NEW_RETURN (stdin_,
Stdin (new Stdout (&reactor)),
-1);
reactor.register_handler (stdin_,
ACE_Event_Handler::READ_MASK);
// Print a message every 10 seconds.
if (reactor.schedule_timer (stdin_, 0,
ACE_Time_Value (10),
ACE_Time_Value (10)) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"%p\n",
"schedule_timer"),
-1);
// Show the top_level widget.
XtRealizeWidget (top_level);
// Demonstrate Reactor/Xt event loop unification.
XtAppMainLoop (XtWidgetToApplicationContext (top_level));
return 0;
}
示例12: while
static void
run_svc (ACE_HANDLE handle)
{
Ping_Pong *callback = 0;
ACE_NEW (callback,
Ping_Pong (ACE_TEXT_ALWAYS_CHAR (string_name),
handle));
ACE_Reactor reactor;
// Register the callback object for the various I/O, signal, and
// timer-based events.
if (reactor.register_handler (callback,
ACE_Event_Handler::READ_MASK
| ACE_Event_Handler::WRITE_MASK) == -1
#if !defined (CHORUS)
|| reactor.register_handler (SIGINT,
callback) == -1
#endif /* CHORUS */
|| reactor.schedule_timer (callback,
0,
SHUTDOWN_TIME) == -1)
{
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("reactor")));
ACE_OS::exit (1);
}
// Main event loop (one per process).
while (callback->is_set () == 0)
if (reactor.handle_events () == -1)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("handle_events")));
}
示例13:
int
RtpsUdpReceiveStrategy::start_i()
{
ACE_Reactor* reactor = link_->get_reactor();
if (reactor == 0) {
ACE_ERROR_RETURN((LM_ERROR,
ACE_TEXT("(%P|%t) ERROR: ")
ACE_TEXT("RtpsUdpReceiveStrategy::start_i: ")
ACE_TEXT("NULL reactor reference!\n")),
-1);
}
if (reactor->register_handler(link_->unicast_socket().get_handle(), this,
ACE_Event_Handler::READ_MASK) != 0) {
ACE_ERROR_RETURN((LM_ERROR,
ACE_TEXT("(%P|%t) ERROR: ")
ACE_TEXT("RtpsUdpReceiveStrategy::start_i: ")
ACE_TEXT("failed to register handler for unicast ")
ACE_TEXT("socket %d\n"),
link_->unicast_socket().get_handle()),
-1);
}
if (link_->config()->use_multicast_) {
if (reactor->register_handler(link_->multicast_socket().get_handle(), this,
ACE_Event_Handler::READ_MASK) != 0) {
ACE_ERROR_RETURN((LM_ERROR,
ACE_TEXT("(%P|%t) ERROR: ")
ACE_TEXT("RtpsUdpReceiveStrategy::start_i: ")
ACE_TEXT("failed to register handler for multicast\n")),
-1);
}
}
return 0;
}
示例14: check_destroy
int
Receiver::open (void *)
{
ACE_Guard<ACE_Recursive_Thread_Mutex> locker (mutex_);
ACE_Reactor *TPReactor = ACE_Reactor::instance ();
this->reactor (TPReactor);
flg_mask_ = ACE_Event_Handler::NULL_MASK ;
if (TPReactor->register_handler (this, flg_mask_) == -1)
return -1;
initiate_io (ACE_Event_Handler::READ_MASK);
return check_destroy ();
}
示例15: timeout
int
TAO_Acceptor::handle_accept_error (ACE_Event_Handler* base_acceptor)
{
if (errno == EMFILE || errno == ENFILE)
{
if (TAO_debug_level > 0)
TAOLIB_DEBUG ((LM_DEBUG, "TAO (%P|%t) - "
"TAO_Acceptor::handle_accept_error - "
"Too many files open\n"));
// If the user has decided to stop accepting when the file handles
// run out, just return -1;
if (this->error_retry_delay_ == 0)
return -1;
// Get the reactor. If there isn't one, which isn't very likely,
// then just return -1.
ACE_Reactor* reactor = base_acceptor->reactor ();
if (reactor == 0)
return -1;
// So that the reactor doesn't completely remove this handler from
// the reactor, register it with the except mask. It should be
// removed in the timer handler.
reactor->register_handler (base_acceptor,
ACE_Event_Handler::EXCEPT_MASK);
// Remove the handler so that the reactor doesn't attempt to
// process this handle again (and tightly spin).
reactor->remove_handler (base_acceptor,
ACE_Event_Handler::ACCEPT_MASK |
ACE_Event_Handler::DONT_CALL);
// Schedule a timer so that we can resume the handler in hopes
// that some file handles have freed up.
ACE_Time_Value timeout (this->error_retry_delay_);
reactor->schedule_timer (base_acceptor, 0, timeout);
}
// We want to keep accepting in all other situations.
return 0;
}