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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? concurrency.cpp

?? 一個開源的網絡開發庫ACE
?? CPP
字號:
// Concurrency.cpp,v 1.1 2000/04/27 23:43:20 jxh Exp

#include "JAWS/JAWS.h"
#include "JAWS/Concurrency.h"
#include "JAWS/IO_Handler.h"
#include "JAWS/Pipeline.h"
#include "JAWS/Pipeline_Tasks.h"
#include "JAWS/Policy.h"
#include "JAWS/Data_Block.h"
#include "JAWS/Waiter.h"
#include "JAWS/Reaper.h"

ACE_RCSID(JAWS, Concurrency, "Concurrency.cpp,v 1.1 2000/04/27 23:43:20 jxh Exp")

JAWS_Concurrency_Base::JAWS_Concurrency_Base (void)
  : ACE_Task<ACE_MT_SYNCH> (new ACE_Thread_Manager),
    mb_acquired_ (0),
    mb_ (0),
    reaper_ (new JAWS_Reaper (this))
{
}

JAWS_Concurrency_Base::~JAWS_Concurrency_Base (void)
{
  delete this->thr_mgr_;
  delete this->reaper_;
}

ACE_Message_Block *
JAWS_Concurrency_Base::singleton_mb (void)
{
  if (this->mb_acquired_ == 0)
    {
      ACE_Guard<ACE_Thread_Mutex> g(this->lock_);

      if (this->mb_acquired_ == 0)
        {
          int result;
          ACE_Message_Block *mb;

          result = this->getq (mb);
          this->mb_acquired_ = 1;

          if (result == -1 || mb == 0)
            return 0;

          this->mb_ = mb;
        }
    }

  return this->mb_;
}

int
JAWS_Concurrency_Base::put (ACE_Message_Block *mb, ACE_Time_Value *tv)
{
  return this->putq (mb, tv);
}

int
JAWS_Concurrency_Base::svc (void)
{
  JAWS_TRACE ("JAWS_Concurrency_Base::svc");

  ACE_Message_Block *mb;         // The message queue element
  JAWS_Data_Block *db;           // Contains the task list

  mb = this->singleton_mb ();

  // A NULL data block indicates that the thread should shut
  // itself down
  if (mb == 0)
    {
      JAWS_TRACE ("JAWS_Concurrency_Base::svc, empty message block");
      return -1;
    }

  db = ACE_dynamic_cast (JAWS_Data_Block *, mb);

  this->svc_loop (db);

  return 0;
}

int
JAWS_Concurrency_Base::svc_loop (JAWS_Data_Block *db)
{
  JAWS_TRACE ("JAWS_Concurrency_Base::svc_loop");

  // Thread specific message block and data block
  ACE_DEBUG ((LM_DEBUG, "(%t) Creating DataBlock\n"));
  JAWS_Data_Block *ts_db = new JAWS_Data_Block (*db);
  if (ts_db == 0)
    {
      ACE_ERROR ((LM_ERROR, "%p\n", "JAWS_Concurrency_Base::svc_hook"));
      return -1;
    }

  for (;;)
    {
      if (this->svc_hook (ts_db) != 0)
        break;
      ts_db->task (db->task ());
      ts_db->policy (db->policy ());
      ts_db->payload (0);
      ts_db->io_handler (0);
      ts_db->rd_ptr (ts_db->wr_ptr ());
      ts_db->crunch ();
    }

  ACE_DEBUG ((LM_DEBUG, "(%t) Deleting DataBlock\n"));
  delete ts_db; // ts_db->release ();

  return 0;
}

int
JAWS_Concurrency_Base::svc_hook (JAWS_Data_Block *ts_db)
{
  JAWS_TRACE ("JAWS_Concurrency_Base::svc_hook");

  int result = 0;

  JAWS_Dispatch_Policy *policy;  // Contains task policies
  JAWS_IO_Handler *handler;      // Keeps the state of the task
  JAWS_Pipeline_Handler *task;   // The task itself
  JAWS_Data_Block *mb;     // The task message block

  policy = ts_db->policy ();
  task = ts_db->task ();
  handler = 0;

  // Get the waiter index
  JAWS_Waiter *waiter = JAWS_Waiter_Singleton::instance ();
  int waiter_index = waiter->index ();

  mb = ts_db;
  do
    {
      JAWS_TRACE ("JAWS_Concurrency_Base::svc_hook, looping");

      // Use a NULL task to make the thread recycle now
      if (task == 0)
        {
          JAWS_TRACE ("JAWS_Concurrency_Base::svc_hook, recycling");
          if (handler)
            handler->done ();
          handler = 0;
          JAWS_IO_Handler **ioh = waiter->find (waiter_index);
          *ioh = 0;
          break;
        }

      // the task should set the handler to the appropriate next step
      result = task->put (mb);

      if (result == 0 || result == -3)
        handler = mb->io_handler ();
      else handler = 0;

      if (result == 1 || result == 2)
        {
          JAWS_TRACE ("JAWS_Concurrency_Base::svc_hook, waiting");
          // need to wait for an asynchronous event

          // We need a way to destroy all the handlers created by the
          // Asynch_Acceptor.  Figure this out later.
          handler = waiter->wait_for_completion (waiter_index);
          if (handler == 0) 
            {
              JAWS_TRACE ("JAWS_Concurrency_Base::svc_hook, bad proactor");
              // Proactor failed
              result = -1;
              break;
            }
        }

      if (result < 0)
        {
          JAWS_TRACE ("JAWS_Concurrency_Base::svc_hook, negative result");
          if (result == -1)
            ACE_ERROR ((LM_ERROR, "%p\n", "JAWS_Concurrency_Base::svc_hook"));

          if (handler)
            handler->done ();

          handler = 0;
          if (result == -2)
            {
              JAWS_IO_Handler **ioh = waiter->find (waiter_index);
              *ioh = 0;
              result = 0;
            }
          break;
        }

      if (handler == 0)
        break;

      mb = handler->message_block ();
      task = handler->task ();
      result = 0;
    }
  while (result == 0);

  return result;
}

int
JAWS_Concurrency_Base::activate_hook (void)
{
  return 0;
}

JAWS_Dispatcher::JAWS_Dispatcher (void)
  : policy_(0)
{
}

int
JAWS_Dispatcher::dispatch (ACE_Message_Block *mb)
{
  return this->policy ()->concurrency ()->put (mb);
}

JAWS_Dispatch_Policy *
JAWS_Dispatcher::policy (void)
{
  return this->policy_;
}

JAWS_Dispatch_Policy *
JAWS_Dispatcher::policy (JAWS_Dispatch_Policy *p)
{
  this->policy_ = p;
  return this->policy_;
}

int
JAWS_Thread_Pool_Task::make (long flags, int nthreads, int maxthreads)
{
  this->flags_ = flags;
  this->nthreads_ = nthreads;
  this->maxthreads_ = maxthreads;

  ACE_thread_t *thr_names = new ACE_thread_t[nthreads];

  if (this->activate (flags | THR_SUSPENDED,
                      nthreads,
                      0,          // force active
                      ACE_DEFAULT_THREAD_PRIORITY,
                      -1,         // group id
                      0,          // ACE_Task_Base
                      0,          // thread handles
                      0,          // stack
                      0,          // stack size
                      thr_names) == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "JAWS_Thread_Pool_Task::activate"),
                      -1);

  for (int i = 0; i < nthreads; i++)
    {
      JAWS_Thread_ID thr_id(thr_names[i]);
      JAWS_IO_Handler *dummy = 0;

      JAWS_Waiter_Singleton::instance ()->insert (thr_id, dummy);
    }

  delete[] thr_names;

  this->thr_mgr_->resume_all ();

  if (this->reaper_->open () == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "JAWS_Reaper::open"),
                      -1);

  return 0;
}

int
JAWS_Thread_Per_Task::make (long flags, int maxthreads)
{
  this->flags_ = flags;
  this->maxthreads_ = maxthreads;
  return 0;
}

int
JAWS_Thread_Per_Task::put (ACE_Message_Block *mb, ACE_Time_Value *tv)
{
  JAWS_TRACE ("JAWS_Thread_Per_Task::put");

  this->putq (mb, tv);
  return this->activate_hook ();
}

int
JAWS_Thread_Per_Task::svc_loop (JAWS_Data_Block *db)
{
  return this->svc_hook (db);
}

int
JAWS_Thread_Per_Task::activate_hook (void)
{
  const int force_active = 1;
  const int nthreads = 1;

  ACE_thread_t thr_name;

  if (this->activate (this->flags_ | THR_SUSPENDED,
                      nthreads,
                      force_active,
                      ACE_DEFAULT_THREAD_PRIORITY,
                      -1,         // group id
                      0,          // ACE_Task_Base
                      0,          // thread handle
                      0,          // stack
                      0,          // stack size
                      &thr_name) == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "JAWS_Thread_Pool_Task::activate"),
                      -1);

  JAWS_Thread_ID thr_id (thr_name);
  JAWS_IO_Handler *dummy = 0;

  // In the thread-per-request strategy, need to take care of the
  // case when the waiter array is full.  Think about that problem
  // later.
  JAWS_Waiter_Singleton::instance ()->insert (thr_id, dummy);

  this->thr_mgr_->resume (thr_name);

  if (this->reaper_->open () == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "JAWS_Reaper::open"),
                      -1);

  return 0;
}

#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Singleton<JAWS_Dispatcher, ACE_SYNCH_MUTEX>;
template class ACE_Singleton<JAWS_Thread_Pool_Task, ACE_SYNCH_MUTEX>;
template class ACE_Singleton<JAWS_Thread_Per_Task, ACE_SYNCH_MUTEX>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate  ACE_Singleton<JAWS_Dispatcher, ACE_SYNCH_MUTEX>
#pragma instantiate  ACE_Singleton<JAWS_Thread_Pool_Task, ACE_SYNCH_MUTEX>
#pragma instantiate  ACE_Singleton<JAWS_Thread_Per_Task, ACE_SYNCH_MUTEX>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合久久久久| 国产精品综合二区| 久久精品亚洲麻豆av一区二区| 粉嫩高潮美女一区二区三区| 亚洲一区成人在线| 国产欧美日韩视频在线观看| 欧美日韩一区中文字幕| 国产精品亚洲午夜一区二区三区| 亚洲综合色区另类av| 久久久久久久久久久黄色| 色香蕉久久蜜桃| 高清不卡一区二区| 精品午夜一区二区三区在线观看| 亚洲人成网站精品片在线观看| 久久综合九色综合97婷婷| 在线综合视频播放| 欧美亚洲一区三区| 成人免费福利片| 国产乱人伦偷精品视频不卡 | 日韩视频在线永久播放| 一本到不卡精品视频在线观看| 国产精品一区二区视频| 奇米888四色在线精品| 夜夜夜精品看看| 亚洲视频一区在线观看| 国产网站一区二区三区| 日韩欧美123| 欧美一级在线免费| 欧美精三区欧美精三区 | www久久精品| 日韩欧美国产综合| 欧美一区二区三区思思人| 欧美日韩一区在线| 欧美日韩日日夜夜| 欧美日本在线播放| 欧美精品少妇一区二区三区| 在线观看区一区二| 欧美日韩一区二区在线视频| 91蝌蚪porny成人天涯| 99久久久免费精品国产一区二区| 成人一区二区三区中文字幕| 福利一区在线观看| 成人av网站在线观看免费| 丁香婷婷综合网| 成人免费看片app下载| 成人国产精品免费观看动漫| 不卡视频一二三| 99国产精品久久久久久久久久| 99视频超级精品| 91色九色蝌蚪| 欧美在线视频你懂得| 欧美日韩在线不卡| 日韩欧美成人一区二区| 精品99一区二区| 亚洲国产精品99久久久久久久久| 国产精品视频在线看| 亚洲特黄一级片| 亚洲成人av福利| 久久99热狠狠色一区二区| 韩国三级中文字幕hd久久精品| 国产成人一区在线| 97精品久久久久中文字幕| 欧美在线不卡视频| 91精品在线麻豆| 久久久国产一区二区三区四区小说 | 欧美日韩一区不卡| 日韩欧美在线一区二区三区| 精品粉嫩超白一线天av| 国产精品九色蝌蚪自拍| 一区二区三区日韩精品| 日本人妖一区二区| 成人午夜看片网址| 欧美最新大片在线看| 日韩精品在线一区| 成人欧美一区二区三区在线播放| 亚洲国产裸拍裸体视频在线观看乱了 | 日本一区二区免费在线观看视频| 综合欧美一区二区三区| 日韩一区精品字幕| 国产东北露脸精品视频| 欧洲日韩一区二区三区| 日韩精品一区国产麻豆| 亚洲人成网站在线| 韩国欧美国产1区| 91九色02白丝porn| 久久美女艺术照精彩视频福利播放| 亚洲欧洲日产国产综合网| 日韩av在线播放中文字幕| 成人动漫中文字幕| 欧美电影免费观看高清完整版在线观看 | 久久精品国产精品青草| 成人激情免费视频| 日韩一级片在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 午夜精品久久久久| 97久久超碰精品国产| 久久亚洲精华国产精华液| 亚洲一级电影视频| 成人性色生活片| 日韩亚洲欧美成人一区| 亚洲精品日韩一| 国产xxx精品视频大全| 欧美日韩国产一区二区三区地区| 久久色.com| 免费精品99久久国产综合精品| 91美女在线视频| 欧美极品少妇xxxxⅹ高跟鞋| 奇米777欧美一区二区| 在线视频中文字幕一区二区| 国产精品入口麻豆九色| 精品亚洲aⅴ乱码一区二区三区| 欧美影院一区二区| 中文字幕一区二区三区四区| 狠狠色丁香九九婷婷综合五月| 欧美情侣在线播放| 一区二区三区四区视频精品免费| 国产精品一二一区| 精品国产免费久久| 美女视频黄久久| 欧美一卡二卡在线观看| 亚洲成人在线观看视频| 在线观看一区二区视频| 亚洲天堂a在线| 99精品欧美一区二区蜜桃免费 | 精品国产成人系列| 日本aⅴ免费视频一区二区三区| 91成人网在线| 亚洲精品国产a久久久久久| 成人av网站免费观看| 国产欧美日韩综合精品一区二区| 加勒比av一区二区| 久久综合狠狠综合久久激情| 麻豆久久久久久久| 欧美videofree性高清杂交| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美精品自拍偷拍动漫精品| 日本成人在线电影网| 国产精品成人午夜| 国内成人自拍视频| 91久久一区二区| 一区二区三区蜜桃| 色婷婷久久久综合中文字幕| 综合激情网...| 在线日韩av片| 日韩和的一区二区| 日韩视频不卡中文| 国产精品夜夜嗨| 亚洲国产精品ⅴa在线观看| 成人app软件下载大全免费| 国产精品久久久久久一区二区三区| 99热精品国产| 亚洲mv在线观看| 日韩一区二区视频| 国产毛片一区二区| 国产精品免费视频观看| 色婷婷亚洲精品| 日韩国产一区二| 久久久精品tv| 色婷婷综合激情| 蜜乳av一区二区| 久久精品日产第一区二区三区高清版 | 国产精品电影一区二区| 91麻豆成人久久精品二区三区| 亚洲一区在线观看网站| 欧美精品乱人伦久久久久久| 久久精品国内一区二区三区| 久久久99久久| 在线一区二区三区四区五区 | 日本高清无吗v一区| 日韩激情av在线| www精品美女久久久tv| 91性感美女视频| 免费国产亚洲视频| 亚洲视频中文字幕| 4438成人网| 成人午夜免费视频| 日日摸夜夜添夜夜添精品视频| 久久亚洲一区二区三区四区| 色视频一区二区| 精品写真视频在线观看| 亚洲精品一二三| 久久免费视频色| 欧美日韩一区二区三区四区| 九九国产精品视频| 一区二区三区中文字幕电影 | 欧美绝品在线观看成人午夜影视| 国产激情精品久久久第一区二区| 一区二区在线观看视频在线观看| 欧美成人精品1314www| 色诱亚洲精品久久久久久| 久久精品国产99国产精品| 亚洲美女视频在线观看| 精品国产乱子伦一区| 欧美中文字幕一区二区三区| 国产精品18久久久久久久网站| 一区二区久久久久| 亚洲国产精品99久久久久久久久| 91精品欧美福利在线观看| 成人av在线资源网站| 老司机精品视频线观看86|