⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ao.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// AO.cpp,v 1.6 2005/10/05 09:05:32 ossama Exp#include "ace/config-lite.h"#if defined (ACE_HAS_THREADS)#include "ace/OS_NS_unistd.h"#include "ace/Activation_Queue.h"#include "ace/Method_Request.h"#include "ace/Task.h"#include "ace/Future.h"#include "ace/Auto_Ptr.h"// Listing 1 code/ch15class HA_ControllerAgent{  // Proxy to the HA_Controller that is on the network.public:  HA_ControllerAgent ()  {    ACE_TRACE      (ACE_TEXT ("HA_ControllerAgent::HA_ControllerAgent"));    status_result_ = 1;  }  int status_update (void)  {    ACE_TRACE (ACE_TEXT ("HA_ControllerAgent::status_update"));    ACE_DEBUG ((LM_DEBUG,                ACE_TEXT ("Obtaining a status_update in %t ")                ACE_TEXT ("thread of control\n")));    // Simulate time to send message and get status.    ACE_OS::sleep (2);    return next_result_id ();  }private:  int next_result_id (void)  {    ACE_TRACE (ACE_TEXT ("HA_ControllerAgent::next_cmd_id"));    return status_result_++;  }  int status_result_;};// Listing 1// Listing 2 code/ch15class StatusUpdate : public ACE_Method_Request{public:  StatusUpdate (HA_ControllerAgent& controller,                ACE_Future<int>& returnVal)    : controller_(controller), returnVal_(returnVal)  {    ACE_TRACE (ACE_TEXT ("StatusUpdate::StatusUpdate"));  }  virtual int call (void)  {    ACE_TRACE (ACE_TEXT ("StatusUpdate::call"));    // status_update with the controller.    this->returnVal_.set (this->controller_.status_update ());    return 0;  }private:  HA_ControllerAgent& controller_;  ACE_Future<int> returnVal_;};// Listing 2// Listing 3 code/ch15class ExitMethod : public ACE_Method_Request{public:  virtual int call (void)  {    // Cause exit.    return -1;  }};// Listing 3// Listing 4 code/ch15class Scheduler : public ACE_Task_Base{public:  Scheduler ()  {    ACE_TRACE (ACE_TEXT ("Scheduler::Scheduler"));    this->activate ();  }  virtual int svc (void)  {    ACE_TRACE (ACE_TEXT ("Scheduler::svc"));    while (1)      {        // Dequeue the next method object        auto_ptr<ACE_Method_Request>          request (this->activation_queue_.dequeue ());        // Invoke the method request.        if (request->call () == -1)          break;      }    return 0;  }  int enqueue (ACE_Method_Request *request)  {    ACE_TRACE (ACE_TEXT ("Scheduler::enqueue"));    return this->activation_queue_.enqueue (request);  }private:  ACE_Activation_Queue activation_queue_;};// Listing 4// Listing 5 code/ch15class HA_ControllerAgentProxy{  // This acts as a Proxy to the controller impl object.public:  ACE_Future<int> status_update (void)  {    ACE_TRACE      (ACE_TEXT ("HA_ControllerAgentProxy::status_update"));    ACE_Future<int> result;    // Create and enqueue a method request on the scheduler.    this->scheduler_.enqueue      (new StatusUpdate (this->controller_, result));    // Return Future to the client.    return result;  }  void exit (void)  {    ACE_TRACE (ACE_TEXT ("HA_ControllerAgentProxy::exit"));    this->scheduler_.enqueue (new ExitMethod);  }private:  Scheduler scheduler_;  HA_ControllerAgent controller_;};// Listing 5// Listing 6 code/ch15int ACE_TMAIN (int, ACE_TCHAR *[]){  HA_ControllerAgentProxy controller;  ACE_Future<int> results[10];  for (int i = 0 ; i < 10; i++)    results[i] = controller.status_update ();  ACE_OS::sleep (5);  // Do other work.  // Get results...  for (int j = 0; j < 10; j++)    {      int result = 0;      results[j].get (result);      ACE_DEBUG ((LM_DEBUG,                  ACE_TEXT ("New status_update %d\n"), result));    }  // Cause the status_updater threads to exit.  controller.exit ();  ACE_Thread_Manager::instance ()->wait ();  return 0;}// Listing 6#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)template class ACE_Future<int>;template class ACE_Future_Rep<int>;template class ACE_Future_Observer<int>;template class ACE_Unbounded_Set<ACE_Future_Observer<int> *>;template class ACE_Node<ACE_Future_Observer<int> *>;template class ACE_Unbounded_Set_Iterator<ACE_Future_Observer<int> *>;template class ACE_Atomic_Op<ACE_Null_Mutex, unsigned int>;template class ACE_Atomic_Op_Ex<ACE_Null_Mutex, unsigned int>;#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)#pragma instantiate ACE_Future<int>#pragma instantiate ACE_Future_Rep<int>#pragma instantiate ACE_Future_Observer<int>#pragma instantiate ACE_Unbounded_Set<ACE_Future_Observer<int> *>#pragma instantiate ACE_Node<ACE_Future_Observer<int> *>#pragma instantiate ACE_Unbounded_Set_Iterator<ACE_Future_Observer<int> *>#pragma instantiate ACE_Atomic_Op<ACE_Null_Mutex, unsigned int>#pragma instantiate ACE_Atomic_Op_Ex<ACE_Null_Mutex, unsigned int>#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */#else#include "ace/OS_main.h"#include "ace/OS_NS_stdio.h"int ACE_TMAIN (int, ACE_TCHAR *[]){  ACE_OS::puts (ACE_TEXT ("This example requires threads."));  return 0;}#endif /* ACE_HAS_THREADS */

⌨️ 快捷键说明

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