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

📄 rtcosscheduling_serverscheduler_i.cpp

📁 这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用于网络游戏医学图像网关的高qos要求.更详细的内容可阅读相应的材料
💻 CPP
📖 第 1 页 / 共 3 页
字号:
          ACE_DEBUG((LM_DEBUG,
                     "Server Base Priority not found in config file, "
                     "RTServerScheduler not used!\n"));
          // Here we cannot let the server continue to run at
          // RTCORBA:: maxPriority, so it will run at minPriority
          // and things will run best effort
          this->current_->the_priority(RTCORBA::minPriority);
          return;
        }

      /// Create a new PCP Manager to manage the priority control
      COS_SCHEDULING_INVOCATION_VALUE p = 0;
      ACE_NEW_THROW_EX(p,
                       PCP_Manager(
                         PCP_factory_->New_PCP_Manager(this->current_)),
                       CORBA::NO_MEMORY());
      ACE_TRY_CHECK;

      // Get the lock on the resource, using MPCP

      p->lock(ceiling + base_priority,
              the_client_priority +  base_priority);

      /// store the thread in the invocation list
      this->invocation_map_.bind(
        p->threadID(),
        p);
      ACE_TRY_CHECK;
    }
  ACE_CATCHANY
    {
      ACE_PRINT_EXCEPTION(ACE_ANY_EXCEPTION,
                          "Unknown exception in the receive request\n");
      ACE_OS::exit(1);
    }
  ACE_ENDTRY;
}

void
RTCosScheduling_ServerScheduler_Interceptor::send_reply(
    PortableInterceptor::ServerRequestInfo_ptr ri
    ACE_ENV_ARG_DECL_NOT_USED)
  ACE_THROW_SPEC((
    CORBA::SystemException
  ))
{
  ACE_UNUSED_ARG(ri);
  finish_execution();
}

void
RTCosScheduling_ServerScheduler_Interceptor::finish_execution()
{
  PCP_Manager *p = 0;
  this->invocation_map_.unbind((ACE_OS::getpid() << 16) + int(ACE_Thread::self()),p);
  if (p)
    {
      /// Release the Lock on the Thread
      p->release_lock();
      /// Delete the PCP Manager
      delete p;
    }
}

char*
RTCosScheduling_ServerScheduler_Interceptor::name(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
  ACE_THROW_SPEC((CORBA::SystemException))
{
  return CORBA::string_dup(this->name_);
}

void
RTCosScheduling_ServerScheduler_Interceptor::destroy(ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
  ACE_THROW_SPEC((CORBA::SystemException))
{
}

void
RTCosScheduling_ServerScheduler_Interceptor::receive_request_service_contexts(
    PortableInterceptor::ServerRequestInfo_ptr ri
    ACE_ENV_ARG_DECL_NOT_USED)
  ACE_THROW_SPEC((
    CORBA::SystemException,
    PortableInterceptor::ForwardRequest))
{
  ACE_UNUSED_ARG(ri);
}

void
RTCosScheduling_ServerScheduler_Interceptor::send_exception(
    PortableInterceptor::ServerRequestInfo_ptr ri
    ACE_ENV_ARG_DECL_NOT_USED)
  ACE_THROW_SPEC((CORBA::SystemException,
    PortableInterceptor::ForwardRequest))
{
  ACE_UNUSED_ARG(ri);
  finish_execution();
}

void
RTCosScheduling_ServerScheduler_Interceptor::send_other(
    PortableInterceptor::ServerRequestInfo_ptr ri
    ACE_ENV_ARG_DECL_NOT_USED)
  ACE_THROW_SPEC((
    CORBA::SystemException,
    PortableInterceptor::ForwardRequest))
  {
    ACE_UNUSED_ARG(ri);
    finish_execution();
  }

#endif /* TAO_HAS_INTERCEPTORS */

int
RTCosScheduling_ServerScheduler_i::resources(
  const char  *node_name,
  const char  *file_name,
  CosSchedulingResourceMap *resource_map)
{
  /// get the resource list list just for the particular node
  const unsigned int BUF_MAX = 256;
  FILE *fp = ACE_OS::fopen(file_name, "r");
  if (fp == NULL)
    {
      /// Error return of we cannot open the file.
      ACE_ERROR_RETURN((LM_ERROR,
                        "Could not find the config file %s, aborting\n",
                        file_name),
                        0);
    }


  char line[BUF_MAX], key[16];
  ACE_OS::strncpy(key, "Node ", sizeof("Node "));
  ACE_OS::strcat(key, node_name);

  ACE_OS::clearerr(fp);
  do
    {
      ACE_OS::fgets(line, BUF_MAX, fp);
    }
  while (ACE_OS::strncmp(line,key,ACE_OS::strlen(key)) != 0);
  /// Make sure we did not hit the end of file
  if (ACE_OS::last_error() == EOF)
    {
      ACE_ERROR_RETURN((LM_ERROR,
                        "Node %s not found in config file, aborting\n",
                        node_name),
                        0);
    }


  /// Skip to the appropriate Task section of the node
  ACE_OS::clearerr(fp);
  do
    {
      ACE_OS::fgets(line, BUF_MAX, fp);
    }
  while (ACE_OS::strncmp(line,
                         "Resources:",
                         ACE_OS::strlen("Resources:")
                        ) != 0);

  /// Make sure we did not hit the end of file
  if (ACE_OS::last_error() == EOF)
    {
      ACE_ERROR_RETURN((LM_ERROR,
                        "Resource list not found for node %s, aborting\n",
                        node_name),
                        0);
    }

  CORBA::Short done = 0;
  COS_SCHEDULING_RESOURCE_KEY name;
  COS_SCHEDULING_RESOURCE_VALUE priority;
  u_int delimiter;

  /// read each activity/priority pair from the config file
  while (!done)
    {
      /// get the activity name
      ACE_OS::fgets(line, BUF_MAX, fp);

      /// check to make sure we have not reached the end of the list.
      if (ACE_OS::strncmp(line, "END", ACE_OS::strlen(line)-1) != 0)
        {
          name      = ACE_CString(line);
          delimiter = name.find('\t');
          priority  = ACE_OS::atoi(ACE_OS::strchr(line, '\t'));
          if (delimiter < name.length() && delimiter > 0)
            {
              resource_map->bind(name.substr(0, delimiter), priority);
            }
          else
            {
              ACE_ERROR_RETURN((LM_ERROR,
                                "Error in reading resources from %s, aborting",
                                file_name),
                                0);
            }
        }
      else
        {
          done = 1;
        }
    }

  return 1;
}

}

#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Map<ACE_String_Base<char>, int>;
template class ACE_Hash_Map_Manager_Ex<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_SYNCH_NULL_MUTEX>;
template class ACE_Hash_Map_Manager_Ex<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_SYNCH_NULL_MUTEX>;
template class ACE_Map<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char> >;
template class ACE_Map_Manager_Adapter<ACE_String_Base<char>, int, ACE_Noop_Key_Generator<ACE_String_Base<char> > >;
template class ACE_Map_Manager<ACE_String_Base<char>, int, ACE_SYNCH_NULL_MUTEX>;
template class ACE_Hash_Map_Manager_Ex_Adapter<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_Noop_Key_Generator<int> >;
template class ACE_Map<int, TAO::PCP_Manager *>;
template class ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter<ACE_Reference_Pair<int const, TAO::PCP_Manager *>, int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int> >;
template class ACE_Hash_Map_Entry<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char> >;
template class ACE_Hash_Map_Entry<int, TAO::PCP_Manager *>;
template class ACE_Iterator_Impl<ACE_Reference_Pair<int const, TAO::PCP_Manager *> >;
template class ACE_Hash_Map_Manager_Ex_Iterator_Adapter<ACE_Reference_Pair<int const, TAO::PCP_Manager *>, int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int> >;
template class ACE_Hash_Map_Manager_Ex_Adapter<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_Noop_Key_Generator<TAO_Pseudo_Var_T<CORBA::Object> > >;

template class ACE_Iterator_Impl<ACE_Reference_Pair<ACE_String_Base<char> const, int> >;
template class ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<ACE_String_Base<char> const, int> >;
template class ACE_Map_Manager_Reverse_Iterator_Adapter<ACE_Reference_Pair<ACE_String_Base<char> const, int>, ACE_String_Base<char>, int>;
template class ACE_Map_Manager_Iterator_Adapter<ACE_Reference_Pair<ACE_String_Base<char> const, int>, ACE_String_Base<char>, int>;
template class ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<int const, TAO::PCP_Manager *> >;
template class ACE_Hash_Map_Iterator_Base_Ex<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_Null_Mutex>;
template class ACE_Iterator_Impl<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> > >;
template class ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> > >;
template class ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> >, TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> > >;
template class ACE_Hash_Map_Manager_Ex_Iterator_Adapter<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> >, TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> > >;
template class ACE_Map_Iterator_Base<ACE_String_Base<char>, int, ACE_Null_Mutex>;
template class ACE_Hash_Map_Iterator_Base_Ex<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_Null_Mutex>;
#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Map<ACE_String_Base<char>, int>
#pragma instantiate ACE_Hash_Map_Manager_Ex<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_SYNCH_MUTEX>
#pragma instantiate ACE_Map_Manager<ACE_String_Base<char>, int, ACE_SYNCH_MUTEX>
#pragma instantiate ACE_Hash_Map_Manager_Ex<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_SYNCH_MUTEX>
#pragma instantiate ACE_Map<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char> >
#pragma instantiate ACE_Map_Manager_Adapter<ACE_String_Base<char>, int, ACE_Noop_Key_Generator<ACE_String_Base<char> > >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Adapter<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_Noop_Key_Generator<int> >
#pragma instantiate ACE_Map<int, TAO::PCP_Manager *>
#pragma instantiate ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter<ACE_Reference_Pair<int const, TAO::PCP_Manager *>, int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int> >
#pragma instantiate ACE_Hash_Map_Entry<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char> >
#pragma instantiate ACE_Hash_Map_Entry<int, TAO::PCP_Manager *>
#pragma instantiate ACE_Iterator_Impl<ACE_Reference_Pair<int const, TAO::PCP_Manager *> >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Iterator_Adapter<ACE_Reference_Pair<int const, TAO::PCP_Manager *>, int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int> >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Adapter<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_Noop_Key_Generator<TAO_Pseudo_Var_T<CORBA::Object> > >
#pragma instantiate ACE_Iterator_Impl<ACE_Reference_Pair<ACE_String_Base<char> const, int> >
#pragma instantiate ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<ACE_String_Base<char> const, int> >
#pragma instantiateACE_Map_Manager_Reverse_Iterator_Adapter<ACE_Reference_Pair<ACE_String_Base<char> const, int>, ACE_String_Base<char>, int>
#pragma instantiate ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<int const, TAO::PCP_Manager *> >
#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> >, ACE_Null_Mutex>
#pragma instantiate ACE_Iterator_Impl<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> > >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Reverse_Iterator_Adapter<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> >, TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> > >
#pragma instantiate ACE_Hash_Map_Manager_Ex_Iterator_Adapter<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> >, TAO_Pseudo_Var_T<CORBA::Object>, ACE_String_Base<char>, TAO::CosSchedulingObjectMap_Hash_Key, ACE_Equal_To<TAO_Pseudo_Var_T<CORBA::Object> > >
#pragma instantiate ACE_Reverse_Iterator_Impl<ACE_Reference_Pair<TAO_Pseudo_Var_T<CORBA::Object> const, ACE_String_Base<char> > >
#pragma instantiate ACE_Map_Iterator_Base<ACE_String_Base<char>, int, ACE_Null_Mutex>
#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<int, TAO::PCP_Manager *, TAO::CosSchedulingInvocation_Hash_key, ACE_Equal_To<int>, ACE_Null_Mutex>
#endif

⌨️ 快捷键说明

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