亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? notification.cpp

?? 這是廣泛使用的通信開源項目,對于大容量,高并發(fā)的通訊要求完全能夠勝任,他廣泛可用于網(wǎng)絡(luò)游戲醫(yī)學圖像網(wǎng)關(guān)的高qos要求.更詳細的內(nèi)容可閱讀相應(yīng)的材料
?? CPP
字號:
// notification.cpp,v 4.22 2003/12/30 23:18:59 shuston Exp

#include "ace/OS_NS_unistd.h"
#include "ace/Service_Config.h"
#include "ace/Thread_Manager.h"
#include "ace/Thread.h"
#include "ace/Signal.h"

ACE_RCSID(Misc, notification, "notification.cpp,v 4.22 2003/12/30 23:18:59 shuston Exp")

#if defined (ACE_HAS_THREADS)
#if defined (CHORUS)
// Chorus does not have signal, so we'll stop after a number of rounds.
#define MAX_ITERATIONS 3
#else
#define MAX_ITERATIONS 10000
#endif /* CHORUS */

class Thread_Handler : public ACE_Event_Handler
{
  // = TITLE
  //   Illustrate how the ACE_Reactor's thread-safe event notification
  //   mechanism works.
  //     
  // = DESCRIPTION
  //   Handle timeouts in the main thread via the ACE_Reactor and I/O
  //   events in a separate thread.  Just before the separate I/O
  //   thread exits it notifies the ACE_Reactor in the main thread
  //   using the ACE_Reactor's notification mechanism.
public:
  Thread_Handler (int delay,
                  int interval,
                  size_t n_threads,
                  size_t max_iterations);
  // Constructor.

  Thread_Handler (size_t id,
                  size_t max_iterations);

  ~Thread_Handler (void);
  // Destructor.

  virtual int handle_signal (int signum,
                             siginfo_t * = 0,
                             ucontext_t * = 0);
  // Handle signals.

  virtual int handle_exception (ACE_HANDLE);
  // Print data from main thread.

  virtual int handle_output (ACE_HANDLE);
  // Print data from main thread.

  virtual int handle_timeout (const ACE_Time_Value &, 
			      const void *);
  // Handle timeout events in the main thread.

  virtual int handle_input (ACE_HANDLE);
  // General notification messages to the Reactor.

  virtual int notify (ACE_Time_Value *tv = 0);
  // Perform notifications.

  virtual int svc (void);
  // Handle I/O events in a separate threads.

private:
  static void *svc_run (void *);
  // Glues C++ to C thread library functions.

  size_t id_;
  // ID passed in by Thread_Handler constructor.

  int iterations_;

  static sig_atomic_t shutdown_;
  // Shutting down.

  // = Timing variables.
  // Delay factor for timer-driven I/O.
  static ACE_Time_Value delay_;

  // Interval factor for Event_Handler timer.
  static ACE_Time_Value interval_;
};

// Shutdown flag.
sig_atomic_t Thread_Handler::shutdown_ = 0;

// Delay factor for timer-driven I/O.
ACE_Time_Value Thread_Handler::delay_;

// Interval factor for Event_Handler timer.
ACE_Time_Value Thread_Handler::interval_;

Thread_Handler::Thread_Handler (size_t id,
                                size_t max_iterations)
  : id_ (id),
    iterations_ (max_iterations)
{
}

Thread_Handler::~Thread_Handler (void)
{
  // Cleanup resources so that we don't crash and burn when shutdown.
  ACE_Event_Handler::remove_stdin_handler (ACE_Reactor::instance (),
                                           ACE_Thread_Manager::instance ());
  ACE_Reactor::instance ()->cancel_timer (this);
}

Thread_Handler::Thread_Handler (int delay, 
				int interval,
				size_t n_threads,
                                size_t max_iterations)
    : iterations_ (max_iterations)
{
  ACE_Sig_Set sig_set;
  
  sig_set.sig_add (SIGQUIT);
  sig_set.sig_add (SIGINT);

  delay_.set (delay);
  interval_.set (interval);
  this->id_ = 0;

  if (ACE_Event_Handler::register_stdin_handler (this,
						 ACE_Reactor::instance (),
						 ACE_Thread_Manager::instance ()) == -1)
    ACE_ERROR ((LM_ERROR,
                "%p\n",
                "register_stdin_handler"));
  else if (ACE_Reactor::instance ()->register_handler (sig_set,
                                                       this) == -1)
    ACE_ERROR ((LM_ERROR,
                "(%t) %p\n",
                "register_handler"));
  else if (ACE_Reactor::instance ()->schedule_timer 
           (this,
            0,
            Thread_Handler::delay_,
            Thread_Handler::interval_) == -1)
    ACE_ERROR ((LM_ERROR,
                "(%t) %p\n",
                "schedule_timer"));
   
  // Set up this thread's signal mask to block all the signal in the
  // <sig_set>, which is inherited by the threads it spawns.
  ACE_Sig_Guard guard (&sig_set);

  // Create N new threads of control Thread_Handlers.

  for (size_t i = 0; i < n_threads; i++)
    {
      Thread_Handler *th;
      
      ACE_NEW (th,
               Thread_Handler (i + 1,
                               this->iterations_));

      if (ACE_Thread::spawn (ACE_reinterpret_cast (ACE_THR_FUNC,
                                                   &Thread_Handler::svc_run),
                             ACE_reinterpret_cast (void *, th),
                             THR_NEW_LWP | THR_DETACHED) != 0)
        ACE_ERROR ((LM_ERROR,
                    "%p\n",
                    "ACE_Thread::spawn"));
    }

  // The destructor of <guard> unblocks the signal set so that only
  // this thread receives them!
}

int
Thread_Handler::notify (ACE_Time_Value *timeout)
{
  // Just do something to test the ACE_Reactor's multi-thread
  // capabilities...

  if (ACE_Reactor::instance ()->notify 
      (this,
       ACE_Event_Handler::EXCEPT_MASK,
       timeout) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "(%t) %p\n", 
		       "notification::notify:exception"),
                      -1);
  else if (ACE_Reactor::instance ()->notify 
	   (this,
            ACE_Event_Handler::WRITE_MASK,
            timeout) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "(%t) %p\n", 
		       "notification::notify:write"),
                      -1);
  return 0;
}

// Test stdin handling that uses <select> to demultiplex HANDLEs.
// Input is only handled by the main thread.

int
Thread_Handler::handle_input (ACE_HANDLE handle)
{
  char buf[BUFSIZ];
  ssize_t n = ACE_OS::read (handle, buf, sizeof buf);

  if (n > 0)
    {
      ACE_DEBUG ((LM_DEBUG,
                  "input to (%t) %*s", 
		  n,
                  buf));

      ACE_DEBUG ((LM_DEBUG,
                  "%d more input to kill\n", 
		  this->iterations_));

      // Only wait up to 10 milliseconds to notify the Reactor.
      ACE_Time_Value timeout (0,
                              10 * 1000);
	  
      if (this->notify (&timeout) == -1)
	ACE_ERROR ((LM_DEBUG, 
                    "(%t), %p\n", 
		    "notification::handle_input:notify"));
      return 0;
    }
  else
    return -1;
}

// Perform a task that will test the ACE_Reactor's multi-threading
// capabilities in separate threads.

int
Thread_Handler::svc (void)
{
  ACE_Time_Value sleep_timeout (0,
                                // Transform this into microseconds and divide by 2.
                                (Thread_Handler::interval_.sec () * ACE_ONE_SECOND_IN_USECS) / 2);

  for (int i = this->iterations_;
       i > 0;
       --i)
    {
      if (this->shutdown_ != 0)
        break;

      // Block for delay_.secs () / 2, then notify the Reactor.
      ACE_OS::sleep (sleep_timeout);

      // Wait up to 10 milliseconds to notify the Reactor.
      ACE_Time_Value timeout (0,
                              10 * 1000);
      if (this->notify (&timeout) == -1)
	ACE_ERROR ((LM_ERROR, 
                    "(%t) %p\n",
                    "notify"));
    }

  ACE_Reactor::instance ()->remove_handler (this,
                                            ALL_EVENTS_MASK);
  ACE_DEBUG ((LM_DEBUG,
              "(%t) exiting svc\n"));
  return 0;
}

// Test signal handling.

int 
Thread_Handler::handle_signal (int signum, siginfo_t *, ucontext_t *)
{
  // @@ Note that this code is not portable to all OS platforms since
  // it uses print statements within signal handler context.
  ACE_DEBUG ((LM_DEBUG,
              "(%t) received signal %S\n",
              signum));

  switch (signum)
    {
    case SIGINT:
    case SIGQUIT:
      ACE_ERROR ((LM_ERROR, 
		  "(%t) ******************** shutting down %n on signal %S\n", 
		  signum));
      this->shutdown_ = 1;
      ACE_Reactor::end_event_loop();
    }
  return 0;
}

int 
Thread_Handler::handle_timeout (const ACE_Time_Value &time,
				const void *)
{
  ACE_DEBUG ((LM_DEBUG,
              "(%t) received timeout at (%u, %u), iterations = %d\n",
	      time.sec (),
              time.usec (),
              this->iterations_));

  if (--this->iterations_ <= 0
      || Thread_Handler::interval_.sec () == 0)
    ACE_Reactor::end_event_loop ();

  return 0;
}

// Called by the ACE_Reactor when it receives a notification.

int
Thread_Handler::handle_exception (ACE_HANDLE)
{
  ACE_DEBUG ((LM_DEBUG, 
	      "(%t) exception to id %d, iteration = %d\n",
	      this->id_,
              this->iterations_));
  return 0;
}

// Called by the ACE_Reactor when it receives a notification.

int
Thread_Handler::handle_output (ACE_HANDLE)
{
  ACE_DEBUG ((LM_DEBUG, 
	      "(%t) output to id %d, iteration = %d\n", 
	      this->id_,
              // This decrement must come last since
              // <handle_exception> is called before <handle_output>!
              this->iterations_--));
  return 0;
}

// "Shim" function that integrates C thread API with C++.

void *
Thread_Handler::svc_run (void *eh)
{
  Thread_Handler *this_handler = 
    ACE_reinterpret_cast (Thread_Handler *, eh);

  if (this_handler->svc () == 0)
    return 0;
  else
    return ACE_reinterpret_cast (void *, -1);
}

int 
main (int argc, char *argv[])
{
  ACE_LOG_MSG->open (argv[0]);

  if (argc < 4)
    {
      ACE_ERROR ((LM_ERROR, 
                  "usage: %s delay interval n_threads [iterations]\n",
                  argv[0]));
      ACE_OS::exit (1);
    }

  int delay = ACE_OS::atoi (argv[1]);
  int interval = ACE_OS::atoi (argv[2]);
  size_t n_threads = ACE_OS::atoi (argv[3]);
  size_t max_iterations = argc > 4 ? ACE_OS::atoi (argv[4]) : MAX_ITERATIONS;

  Thread_Handler thr_handler (delay,
                              interval,
                              n_threads,
                              max_iterations);

  ACE_Reactor::run_event_loop ();

  ACE_DEBUG ((LM_DEBUG,
              "exiting from main\n"));
  return 0;
}
#else
int 
main (int, char *[])
{
  ACE_ERROR_RETURN ((LM_ERROR, 
		     "threads must be supported to run this application\n"), -1);
}
#endif /* ACE_HAS_THREADS */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜伦理影院| 成人黄色在线看| 国产成人综合在线观看| 91视频91自| 精品欧美一区二区三区精品久久| 亚洲三级小视频| 久久精品99国产精品日本| 色婷婷一区二区| 国产欧美一区二区在线观看| 日韩国产欧美在线观看| 波多野结衣一区二区三区| 欧美mv日韩mv国产网站| 亚洲欧美日韩国产中文在线| 国产乱码精品一区二区三区av | 136国产福利精品导航| 麻豆精品一区二区| 欧美日韩一区在线| 亚洲色图20p| 911精品产国品一二三产区| 国产精品视频在线看| 黑人精品欧美一区二区蜜桃| 宅男噜噜噜66一区二区66| 亚洲精品久久久久久国产精华液| 国产成人啪午夜精品网站男同| 欧美一区日韩一区| 亚洲不卡av一区二区三区| 在线一区二区三区四区五区| 中文字幕亚洲电影| 波多野结衣一区二区三区 | 久久99精品一区二区三区| 欧美三级资源在线| 亚洲欧美电影院| 91麻豆国产自产在线观看| 国产精品嫩草99a| 成人毛片视频在线观看| 亚洲国产激情av| 国产91丝袜在线播放| 国产日产精品1区| 国产成人精品三级麻豆| 国产亚洲人成网站| 国产精品一区二区x88av| 国产亚洲欧美色| 成人深夜视频在线观看| 日本一区二区三区四区在线视频| 国产精品99久久久久久久女警 | 国产盗摄一区二区三区| 国产欧美一区二区三区沐欲| 国产成人亚洲综合a∨猫咪| 国产欧美日韩久久| www.欧美日韩| 亚洲一区日韩精品中文字幕| 欧美三级视频在线观看| 日本伊人色综合网| 久久女同性恋中文字幕| 99re这里都是精品| 亚洲二区在线视频| 欧美mv和日韩mv国产网站| 国产乱人伦偷精品视频不卡 | 亚洲一区二区视频| 91精品蜜臀在线一区尤物| 久久不见久久见免费视频7| 国产婷婷色一区二区三区在线| 成人性生交大合| 亚洲综合色视频| 欧美一区二区在线看| 高清不卡一区二区| 国产在线精品视频| 国产精品天干天干在线综合| 91丝袜国产在线播放| 日本不卡高清视频| 国产精品网站一区| 91精品久久久久久蜜臀| 国产盗摄女厕一区二区三区| 自拍偷拍亚洲欧美日韩| 91精品国产色综合久久ai换脸| 国产精品一区不卡| 亚洲a一区二区| 国产欧美一区二区精品性色超碰| 欧美丝袜自拍制服另类| 国产精品99久久不卡二区| 亚洲第一成人在线| 国产精品久久久一区麻豆最新章节| 欧洲精品一区二区三区在线观看| 国产精品亚洲成人| 午夜精品福利一区二区蜜股av| 欧美国产97人人爽人人喊| 欧美酷刑日本凌虐凌虐| 972aa.com艺术欧美| 久久国产日韩欧美精品| 亚洲国产欧美在线| 国产亚洲欧美日韩日本| 日韩欧美综合一区| 欧美色倩网站大全免费| av在线不卡电影| 国产又粗又猛又爽又黄91精品| 亚洲综合区在线| 欧美激情在线一区二区三区| 日韩免费一区二区三区在线播放| 欧美在线观看你懂的| 成人av免费在线观看| 极品少妇一区二区三区精品视频| 日日夜夜一区二区| 一级做a爱片久久| √…a在线天堂一区| 久久久久久亚洲综合影院红桃| 亚洲欧洲精品天堂一级 | 欧美日韩高清一区二区不卡| 99久久免费国产| 粉嫩绯色av一区二区在线观看| 精品一区二区三区免费毛片爱| 奇米综合一区二区三区精品视频| 亚洲综合免费观看高清在线观看| 中文字幕一区二区三中文字幕| 国产欧美精品一区二区色综合朱莉| 精品日韩欧美一区二区| 欧美哺乳videos| 精品噜噜噜噜久久久久久久久试看 | 精品视频在线视频| 欧美中文字幕一区| 欧美无人高清视频在线观看| 在线免费观看日本欧美| 精品污污网站免费看| 欧美视频一区二区在线观看| 欧美在线不卡视频| 欧美日韩黄视频| 337p亚洲精品色噜噜噜| 欧美日韩一区二区三区在线| 欧美人体做爰大胆视频| 欧美丰满少妇xxxxx高潮对白| 日韩一区二区三区av| 精品理论电影在线观看| 久久久精品黄色| 国产精品第四页| 亚洲综合成人网| 日本免费新一区视频| 久久99国产精品尤物| 国产成人99久久亚洲综合精品| 不卡一二三区首页| 色狠狠一区二区三区香蕉| 欧美三级三级三级爽爽爽| 日韩欧美在线影院| 国产欧美一区视频| 一区二区三区四区在线播放| 午夜精品福利一区二区三区av| 免费高清视频精品| 国产精品99久久久久| 91精彩视频在线观看| 欧美一级日韩一级| 国产精品视频线看| 香蕉成人伊视频在线观看| 久久国产精品露脸对白| 91在线高清观看| 欧美一区二区久久| 国产精品成人在线观看| 亚洲一区二区三区四区在线 | 不卡的av中国片| 91黄色激情网站| 日韩精品一区二区三区视频播放| 国产欧美日韩麻豆91| 亚洲成av人片在线| 高清不卡在线观看av| 在线成人午夜影院| 国产精品久久久久久久久搜平片| 婷婷综合在线观看| 成人激情动漫在线观看| 91精品国产一区二区三区蜜臀| 国产精品丝袜在线| 久久成人免费网| 欧美中文字幕一区二区三区亚洲| 精品日韩欧美在线| 亚洲成人av福利| 99久久精品国产一区| 欧美成人艳星乳罩| 午夜欧美电影在线观看| 成人深夜在线观看| 久久久久久久久99精品| 午夜精品久久久久久| 色妞www精品视频| 欧美国产综合一区二区| 麻豆国产一区二区| 欧美欧美欧美欧美| 亚洲精品欧美专区| 成人黄色在线网站| 久久九九99视频| 精品一区二区三区免费毛片爱| 欧美肥妇毛茸茸| 亚洲第一主播视频| 欧美主播一区二区三区| 成人欧美一区二区三区黑人麻豆| 国产在线视频一区二区| 欧美一级淫片007| 午夜国产精品影院在线观看| 色狠狠色噜噜噜综合网| 中文字幕一区在线观看视频| 懂色av中文一区二区三区| 婷婷激情综合网| 欧美色男人天堂| 亚洲国产你懂的| 精品视频一区二区不卡| 亚洲国产精品久久人人爱蜜臀|