📄 current.cpp
字号:
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
"Caught exception:");
return -1;
}
ACE_ENDTRY;
return 0;
}
RTScheduling::Current::IdType *
TAO_RTScheduler_Current_i::id (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
RTScheduling::Current::IdType_var guid = this->guid_;
return guid._retn ();
}
CORBA::Policy_ptr
TAO_RTScheduler_Current_i::scheduling_parameter (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return CORBA::Policy::_duplicate (this->sched_param_);
}
CORBA::Policy_ptr
TAO_RTScheduler_Current_i::implicit_scheduling_parameter (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return CORBA::Policy::_duplicate (this->implicit_sched_param_);
}
RTScheduling::Current::NameList *
TAO_RTScheduler_Current_i::current_scheduling_segment_names (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
RTScheduling::Current::NameList* name_list;
ACE_NEW_RETURN (name_list,
RTScheduling::Current::NameList,
0);
TAO_RTScheduler_Current_i* current = this;
for (int index = 0; current != 0; index++)
{
name_list->length (index+1);
(*name_list) [index] = current->name ();
current = current->previous_current_;
}
return name_list;
}
const char*
TAO_RTScheduler_Current_i::name (void)
{
return CORBA::string_dup (this->name_.in ());
}
void
TAO_RTScheduler_Current_i::cancel_thread (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
int guid;
ACE_OS::memcpy (&guid,
this->guid_.get_buffer (),
this->guid_.length ());
ACE_DEBUG ((LM_DEBUG,
"Distributable Thread - %d is cancelled\n",
guid));
// Let the scheduler know that the thread has
// been cancelled.
this->scheduler_->cancel (this->guid_
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
this->cleanup_DT ();
// Remove all related nested currents.
this->delete_all_currents ();
// Throw exception.
ACE_THROW (CORBA::THREAD_CANCELLED ());
}
void
TAO_RTScheduler_Current_i::cleanup_DT (void)
{
// Remove DT from map.
this->dt_hash_->unbind (this->guid_);
}
void
TAO_RTScheduler_Current_i::cleanup_current (void)
{
TAO_TSS_Resources *tss =
TAO_TSS_RESOURCES::instance ();
tss->rtscheduler_current_impl_ = this->previous_current_;
// Delete this current.
delete this;
}
void
TAO_RTScheduler_Current_i::delete_all_currents (void)
{
TAO_RTScheduler_Current_i* current = this;
while (current != 0)
{
TAO_RTScheduler_Current_i* prev_current = current->previous_current_;
current->cleanup_current ();
current = prev_current;
}
TAO_TSS_Resources *tss =
TAO_TSS_RESOURCES::instance ();
tss->rtscheduler_current_impl_ = tss->rtscheduler_previous_current_impl_;
}
void
TAO_RTScheduler_Current_i::id (RTScheduling::Current::IdType guid)
{
this->guid_ = guid;
}
void
TAO_RTScheduler_Current_i::name (char * name)
{
this->name_ = CORBA::string_dup (name);
}
RTScheduling::DistributableThread_ptr
TAO_RTScheduler_Current_i::DT (void)
{
return this->dt_._retn ();
}
void
TAO_RTScheduler_Current_i::DT (RTScheduling::DistributableThread_ptr dt)
{
this->dt_ = RTScheduling::DistributableThread::_duplicate (dt);
}
void
TAO_RTScheduler_Current_i::scheduling_parameter (CORBA::Policy_ptr sched_param)
{
this->sched_param_ = CORBA::Policy::_duplicate (sched_param);
}
void
TAO_RTScheduler_Current_i::implicit_scheduling_parameter (CORBA::Policy_ptr implicit_sched_param)
{
this->implicit_sched_param_ = CORBA::Policy::_duplicate (implicit_sched_param);
}
// *************************************************************
// *************************************************************
// Operations for class TAO_RTScheduler_Current_var
// *************************************************************
TAO_RTScheduler_Current_var::TAO_RTScheduler_Current_var (void) // default constructor
: ptr_ (TAO_RTScheduler_Current::_nil ())
{}
::TAO_RTScheduler_Current_ptr
TAO_RTScheduler_Current_var::ptr (void) const
{
return this->ptr_;
}
TAO_RTScheduler_Current_var::TAO_RTScheduler_Current_var (const ::TAO_RTScheduler_Current_var &p)
: TAO_Base_var (),
ptr_ (TAO_RTScheduler_Current::_duplicate (p.ptr ()))
{}
TAO_RTScheduler_Current_var::~TAO_RTScheduler_Current_var (void) // destructor
{
CORBA::release (this->ptr_);
}
TAO_RTScheduler_Current_var &
TAO_RTScheduler_Current_var::operator= (TAO_RTScheduler_Current_ptr p)
{
CORBA::release (this->ptr_);
this->ptr_ = p;
return *this;
}
TAO_RTScheduler_Current_var &
TAO_RTScheduler_Current_var::operator= (const ::TAO_RTScheduler_Current_var &p)
{
if (this != &p)
{
CORBA::release (this->ptr_);
this->ptr_ = ::TAO_RTScheduler_Current::_duplicate (p.ptr ());
}
return *this;
}
TAO_RTScheduler_Current_var::operator const ::TAO_RTScheduler_Current_ptr &() const
{
return this->ptr_;
}
TAO_RTScheduler_Current_var::operator ::TAO_RTScheduler_Current_ptr &()
{
return this->ptr_;
}
TAO_RTScheduler_Current_ptr
TAO_RTScheduler_Current_var::operator-> (void) const
{
return this->ptr_;
}
TAO_RTScheduler_Current_ptr
TAO_RTScheduler_Current_var::in (void) const
{
return this->ptr_;
}
TAO_RTScheduler_Current_ptr &
TAO_RTScheduler_Current_var::inout (void)
{
return this->ptr_;
}
TAO_RTScheduler_Current_ptr &
TAO_RTScheduler_Current_var::out (void)
{
CORBA::release (this->ptr_);
this->ptr_ = ::TAO_RTScheduler_Current::_nil ();
return this->ptr_;
}
TAO_RTScheduler_Current_ptr
TAO_RTScheduler_Current_var::_retn (void)
{
// yield ownership of managed obj reference
::TAO_RTScheduler_Current_ptr val = this->ptr_;
this->ptr_ = ::TAO_RTScheduler_Current::_nil ();
return val;
}
TAO_RTScheduler_Current_ptr
TAO_RTScheduler_Current_var::duplicate (TAO_RTScheduler_Current_ptr p)
{
return ::TAO_RTScheduler_Current::_duplicate (p);
}
void
TAO_RTScheduler_Current_var::release (TAO_RTScheduler_Current_ptr p)
{
CORBA::release (p);
}
TAO_RTScheduler_Current_ptr
TAO_RTScheduler_Current_var::nil (void)
{
return ::TAO_RTScheduler_Current::_nil ();
}
TAO_RTScheduler_Current_ptr
TAO_RTScheduler_Current_var::narrow (
CORBA::Object *p
ACE_ENV_ARG_DECL
)
{
return ::TAO_RTScheduler_Current::_narrow (p ACE_ENV_ARG_PARAMETER);
}
CORBA::Object *
TAO_RTScheduler_Current_var::upcast (void *src)
{
TAO_RTScheduler_Current **tmp =
ACE_static_cast (TAO_RTScheduler_Current **, src);
return *tmp;
}
TAO_RTScheduler_Current_ptr TAO_RTScheduler_Current::_narrow (
CORBA::Object_ptr obj
ACE_ENV_ARG_DECL_NOT_USED
)
{
return
TAO_RTScheduler_Current::_duplicate (
dynamic_cast<TAO_RTScheduler_Current *> (obj)
);
}
TAO_RTScheduler_Current_ptr
TAO_RTScheduler_Current::_duplicate (TAO_RTScheduler_Current_ptr obj)
{
if (!CORBA::is_nil (obj))
obj->_add_ref ();
return obj;
}
const char* TAO_RTScheduler_Current::_interface_repository_id (void) const
{
return "IDL:TAO_RTScheduler_Current:1.0";
}
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Equal_To<IdType>;
template class ACE_Hash_Map_Manager_Ex<IdType, RTScheduling::DistributableThread_var, TAO_DTId_Hash, ACE_Equal_To<IdType>, TAO_SYNCH_MUTEX>;
template class ACE_Hash_Map_Iterator_Ex<IdType, RTScheduling::DistributableThread_var, TAO_DTId_Hash, ACE_Equal_To<IdType>, TAO_SYNCH_MUTEX>;
template class ACE_Hash_Map_Entry<IdType, RTScheduling::DistributableThread_var>;
template class ACE_Hash_Map_Reverse_Iterator_Ex<IdType, RTScheduling::DistributableThread_var, TAO_DTId_Hash, ACE_Equal_To<IdType>, TAO_SYNCH_MUTEX>;
template class ACE_Hash_Map_Iterator_Base_Ex<IdType, RTScheduling::DistributableThread_var, TAO_DTId_Hash, ACE_Equal_To<IdType>, TAO_SYNCH_MUTEX>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Equal_To<IdType>;
#pragma instantiate ACE_Hash_Map_Manager_Ex<IdType, RTScheduling::DistributableThread_var, TAO_DTId_Hash, ACE_Equal_To<IdType>, TAO_SYNCH_MUTEX>;
#pragma instantiate ACE_Hash_Map_Iterator_Ex<IdType, RTScheduling::DistributableThread_var, TAO_DTId_Hash, ACE_Equal_To<IdType>, TAO_SYNCH_MUTEX>;
#pragma instantiate ACE_Hash_Map_Entry<IdType, RTScheduling::DistributableThread_var>;
#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<IdType, RTScheduling::DistributableThread_var, TAO_DTId_Hash, ACE_Equal_To<IdType>, TAO_SYNCH_MUTEX>;
#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<IdType, RTScheduling::DistributableThread_var, TAO_DTId_Hash, ACE_Equal_To<IdType>, TAO_SYNCH_MUTEX>;
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -