removals.cpp
来自「ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识」· C++ 代码 · 共 119 行
CPP
119 行
// $Id: Removals.cpp 78962 2007-07-20 03:27:14Z sowayaa $//// ============================================================================//// = LIBRARY// examples//// = FILENAME// Removals.cpp//// = DESCRIPTION//// Tests the Reactor's ability to handle simultaneous events. If// you pass anything on the command-line, then each handler// requests to be removed from the Reactor after each event.//// = AUTHOR// Tim Harrison// Irfan Pyarali//// ============================================================================#include "ace/OS_main.h"#if defined (ACE_WIN32)#include "ace/Reactor.h"#include "ace/Service_Config.h"#include "ace/Event.h"ACE_RCSID(WFMO_Reactor, Removals, "$Id: Removals.cpp 78962 2007-07-20 03:27:14Z sowayaa $")class Event_Handler : public ACE_Event_Handler// = TITLE// Generic Event Handler.//// = DESCRIPTION//// Creates event. Registers with Reactor. Signals event. If// created with -close_down- it returns -1 from handle signal.{public: Event_Handler (int event_number, int close_down) : event_number_ (event_number), close_down_ (close_down) { if (ACE_Reactor::instance ()->register_handler (this, this->event_.handle ()) == -1) ACE_ERROR ((LM_ERROR, "%p\tevent handler %d cannot be added to Reactor\n", "", event_number_)); this->event_.signal (); } virtual int handle_signal (int, siginfo_t *, ucontext_t *) { if (this->close_down_) return -1; else return 0; } virtual int handle_close (ACE_HANDLE, ACE_Reactor_Mask) { ACE_DEBUG ((LM_DEBUG, "event handler %d closed.\n", event_number_)); delete this; return 0; } virtual ACE_HANDLE get_handle (void) const { return event_.handle (); }private: int event_number_; // Our event number. int close_down_; // Shall we close down or not. ACE_Event event_; // Signaled to shut down the handler.};intACE_TMAIN (int argc, ACE_TCHAR *[]){ int close_down = argc > 1 ? 1 : 0; for (size_t i = 1; i <= ACE_Reactor::instance ()->size (); i++) new Event_Handler (static_cast<int> (i), close_down); int result = 0; //FUZZ: disable check_for_lack_ACE_OS ACE_Time_Value time (1); //FUZZ: enable check_for_lack_ACE_OS while (1) { result = ACE_Reactor::instance ()->handle_events (time); if (result == 0 && errno == ETIME) { ACE_DEBUG ((LM_DEBUG, "No more work left: timing out\n")); break; } if (result == -1) ACE_ERROR_RETURN ((LM_ERROR, "%p.\n", "main"), -1); } return 0;}#else /* !ACE_WIN32 */intACE_TMAIN (int , ACE_TCHAR *[]){ return 0;}#endif /* ACE_WIN32 */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?