test_timeout.cpp

来自「ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识」· C++ 代码 · 共 130 行

CPP
130
字号
// $Id: test_timeout.cpp// ============================================================================//// = LIBRARY//    examples//// = FILENAME//    test_timeout.cpp//// = DESCRIPTION////    This example application shows how to write event loops that//    handle events for some fixed amount of time. Note that any//    thread in the Proactor thread pool can call back the handler. On//    POSIX4 systems, this test works only with POSIX_SIG_Proactor,//    which can work with multiple threads.//// = AUTHOR//    Irfan Pyarali and Alexander Babu Arulanthu//// ============================================================================#include "ace/Proactor.h"#include "ace/Task.h"#include "ace/Atomic_Op.h"#include "ace/OS_NS_sys_time.h"#include "ace/OS_NS_unistd.h"#include "ace/OS_main.h"ACE_RCSID(Proactor, test_timeout, "$Id: test_timeout.cpp 78634 2007-06-28 14:14:06Z johnnyw $")#if defined (ACE_HAS_WIN32_OVERLAPPED_IO) || defined (ACE_HAS_AIO_CALLS)  // This only works on Win32 platforms and on Unix platforms supporting  // POSIX aio calls.class Timeout_Handler : public ACE_Handler{  // = TITLE  //     Generic timeout handler.public:  Timeout_Handler (void)    : start_time_ (ACE_OS::gettimeofday ())    {    }  virtual void handle_time_out (const ACE_Time_Value &tv,				const void *arg)    {      // Print out when timeouts occur.      ACE_DEBUG ((LM_DEBUG, "(%t) %d timeout occurred for %s @ %d.\n",		  ++count_,		  (char *) arg,		  (tv - this->start_time_).sec ()));      // Sleep for a while      ACE_OS::sleep (4);    }private:  ACE_Atomic_Op <ACE_SYNCH_MUTEX, int> count_;  // Number of the timer event.  ACE_Time_Value start_time_;  // Starting time of the test.};class Worker : public ACE_Task <ACE_NULL_SYNCH>{public:  int svc (void)    {      // Handle events for 13 seconds.      ACE_Time_Value run_time (13);      ACE_DEBUG ((LM_DEBUG, "(%t):Starting svc routine\n"));      if (ACE_Proactor::run_event_loop(run_time) == -1)        ACE_ERROR_RETURN ((LM_ERROR, "(%t):%p.\n", "Worker::svc"), -1);      ACE_DEBUG ((LM_DEBUG, "(%t) work complete\n"));      return 0;    }};intACE_TMAIN (int, ACE_TCHAR *[]){  Timeout_Handler handler;  // Register a 2 second timer.  ACE_Time_Value foo_tv (2);  if (ACE_Proactor::instance ()->schedule_timer (handler,                                                 (void *) "Foo",                                                 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_Proactor::instance ()->schedule_timer (handler,                                                 (void *) "Bar",                                                 ACE_Time_Value::zero,                                                 bar_tv) == -1)    ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "schedule_timer"), -1);  Worker worker;  if (worker.activate (THR_NEW_LWP, 10) == -1)    ACE_ERROR_RETURN ((LM_ERROR, "%p.\n", "main"), -1);  ACE_Thread_Manager::instance ()->wait ();  return 0;}#else /* ACE_HAS_WIN32_OVERLAPPED_IO || ACE_HAS_AIO_CALLS */intACE_TMAIN (int, ACE_TCHAR *[]){  ACE_DEBUG ((LM_DEBUG,              "This example is multithreaded version of test_timeout_st.cpp\n"              "This doesnt work on this platform !!!\n"));  return 1;}#endif /*  ACE_HAS_WIN32_OVERLAPPED_IO || ACE_HAS_AIO_CALLS */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?