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

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

?? concurrency.cpp

?? 最新的版本ACE-5.6.8,剛從外文網上搬下,與大家分享.
?? CPP
字號:
// $Id: Concurrency.cpp 80826 2008-03-04 14:51:23Z wotte $

#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, "$Id: Concurrency.cpp 80826 2008-03-04 14:51:23Z wotte $")

JAWS_Concurrency_Base::JAWS_Concurrency_Base (void)
  : ACE_Task<ACE_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_SYNCH_MUTEX> g(this->lock_);

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

          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 = 0;         // The message queue element
  JAWS_Data_Block *db = 0;           // 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 = 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_IO_Handler *handler = 0;      // Keeps the state of the task
  JAWS_Pipeline_Handler *task = 0;   // The task itself
  JAWS_Data_Block *mb = 0;     // The task message block

  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_by_index (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_by_index (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;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本免费电影| 亚洲国产精品久久久久秋霞影院 | 亚洲一区日韩精品中文字幕| 亚洲午夜一区二区三区| 蜜桃久久av一区| 国产91丝袜在线观看| 欧美视频中文字幕| 久久久国产精品麻豆| 一区二区三区高清不卡| 美国av一区二区| 91亚洲精品久久久蜜桃| 日韩视频一区二区三区在线播放 | 国产激情一区二区三区四区| 日本精品免费观看高清观看| 精品电影一区二区三区| 国产精品国产三级国产专播品爱网| 亚洲成a人v欧美综合天堂 | 国产成人精品综合在线观看| 欧美日韩免费电影| 亚洲国产精品激情在线观看 | 日韩一区二区三区电影在线观看| 国产校园另类小说区| 亚洲专区一二三| 不卡的av在线| 久久久精品免费观看| 日韩电影一区二区三区| 91丨porny丨户外露出| 久久婷婷色综合| 天堂久久一区二区三区| 色综合久久中文综合久久97| 国产校园另类小说区| 青草av.久久免费一区| 欧美亚洲一区二区三区四区| 精品欧美乱码久久久久久| 亚洲一区二区精品3399| 99久久精品国产一区| 欧美激情自拍偷拍| 老司机免费视频一区二区| 欧美午夜电影一区| 亚洲毛片av在线| av资源网一区| 精品久久国产老人久久综合| 日韩av中文字幕一区二区三区| 欧美专区亚洲专区| 国产精品天干天干在线综合| 国产精品白丝av| 久久婷婷国产综合精品青草| 国产综合成人久久大片91| 欧美电视剧在线观看完整版| 麻豆传媒一区二区三区| 制服.丝袜.亚洲.另类.中文| 夜夜爽夜夜爽精品视频| 在线观看91精品国产入口| 国产亚洲欧洲一区高清在线观看| 国产一区二区三区免费播放| xnxx国产精品| 成人性生交大片免费看视频在线| 国产欧美精品一区aⅴ影院 | 亚洲视频一区在线| 一本色道久久综合精品竹菊| 亚洲激情自拍偷拍| 欧美性videosxxxxx| 丝袜美腿亚洲色图| 精品99999| 国产馆精品极品| 欧美韩国日本不卡| 国产精品乡下勾搭老头1| 国产精品国产三级国产普通话蜜臀 | 日韩三级视频在线观看| 亚洲成人午夜电影| 精品伦理精品一区| 成人av中文字幕| 亚洲国产日韩在线一区模特| 91在线视频免费观看| 香港成人在线视频| 久久综合狠狠综合久久激情| www.欧美精品一二区| 一区二区三区欧美激情| 日韩一级高清毛片| 粉嫩aⅴ一区二区三区四区五区 | 欧美一区二区黄| 国产一区视频网站| 亚洲老妇xxxxxx| 9191成人精品久久| 国产成人在线观看免费网站| 一区二区在线观看免费视频播放 | 一级特黄大欧美久久久| 精品欧美乱码久久久久久1区2区 | 欧美视频日韩视频| 国产乱一区二区| 亚洲免费成人av| 日韩免费看的电影| 色婷婷一区二区三区四区| 久久99精品久久久久久久久久久久| 国产精品入口麻豆九色| 欧美一区二区三区在线观看| 国产乱码精品1区2区3区| 亚洲综合色丁香婷婷六月图片| 精品成人佐山爱一区二区| 色伊人久久综合中文字幕| 国产在线视频一区二区| 亚洲成av人片一区二区梦乃 | 久久久久久久av麻豆果冻| 欧美日韩久久一区二区| 欧美成人一区二区三区| 欧美怡红院视频| 91最新地址在线播放| 国产一区二区在线观看免费| 五月天婷婷综合| 亚洲三级小视频| 久久综合久久99| 色综合天天综合给合国产| 国内成人免费视频| 日本亚洲最大的色成网站www| 亚洲精品日日夜夜| 久久久久国色av免费看影院| 精品视频123区在线观看| 色综合视频在线观看| 国产成人av资源| 国产精品91一区二区| 久久99国产精品成人| 视频一区二区三区中文字幕| 一二三四社区欧美黄| 久久久综合视频| 久久久久久久电影| 国产精品国产精品国产专区不片| 久久久久国产精品人| 亚洲欧洲国产专区| 亚洲夂夂婷婷色拍ww47| 偷拍与自拍一区| 久久精品国产77777蜜臀| 国产在线麻豆精品观看| av色综合久久天堂av综合| 欧洲视频一区二区| 欧美一区二区不卡视频| 精品盗摄一区二区三区| 国产欧美日韩视频一区二区 | 91一区一区三区| 欧美日韩黄色一区二区| 欧美成人免费网站| 国产精品区一区二区三| 亚洲自拍与偷拍| 久久国产综合精品| 成人黄色777网| 欧美日韩精品欧美日韩精品| 久久久久久久久久久电影| 亚洲色图.com| 黄网站免费久久| 一本久道久久综合中文字幕| 5858s免费视频成人| 国产精品三级av在线播放| 午夜视频在线观看一区二区| 国产综合色视频| 91福利小视频| 国产日韩精品一区二区浪潮av| 怡红院av一区二区三区| 国产精选一区二区三区| 欧美做爰猛烈大尺度电影无法无天| 欧美一二区视频| 综合久久久久综合| 精品一区二区三区av| 色哟哟日韩精品| 亚洲国产精品ⅴa在线观看| 亚洲二区视频在线| 不卡欧美aaaaa| 日韩美女主播在线视频一区二区三区| 中文字幕在线不卡视频| 成人免费高清视频在线观看| 欧美精品视频www在线观看| 国产网红主播福利一区二区| 天堂在线亚洲视频| 91小宝寻花一区二区三区| 精品久久国产老人久久综合| 亚洲一区自拍偷拍| voyeur盗摄精品| 久久久久久免费网| 免费成人av在线播放| 欧美美女直播网站| 亚洲男人都懂的| 成人禁用看黄a在线| 久久久久久**毛片大全| 久久97超碰国产精品超碰| 欧美精品在线观看播放| 亚洲自拍都市欧美小说| 91亚洲精品久久久蜜桃网站| 国产日韩精品一区二区三区| 日本女人一区二区三区| 欧美老人xxxx18| 一区二区三区高清| 91伊人久久大香线蕉| 国产精品久久久99| 成人黄色免费短视频| 国产精品少妇自拍| 成人h精品动漫一区二区三区| 国产天堂亚洲国产碰碰| 国产高清久久久久| 久久久久久久久久久久久夜| 精品亚洲国内自在自线福利| 欧美成人福利视频| 久久99久久久久久久久久久|