OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer Class Referenceabstract
Inheritance diagram for OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer:
Collaboration graph
[legend]

Public Member Functions

 LivelinessTimer (DomainParticipantImpl &impl, DDS::LivelinessQosPolicyKind kind)
 
virtual ~LivelinessTimer ()
 
void add_adjust (OpenDDS::DCPS::DataWriterImpl *writer)
 
void remove_adjust ()
 
void execute (const MonotonicTimePoint &now)
 
virtual void dispatch (const MonotonicTimePoint &tv)=0
 
virtual void cancel ()=0
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 

Protected Member Functions

TimeDuration interval () const
 
virtual void schedule (const TimeDuration &interval)=0
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 

Protected Attributes

DomainParticipantImplimpl_
 
const DDS::LivelinessQosPolicyKind kind_
 

Private Attributes

TimeDuration interval_
 
bool recalculate_interval_
 
MonotonicTimePoint last_liveliness_check_
 
bool scheduled_
 
ACE_Thread_Mutex lock_
 

Detailed Description

Definition at line 579 of file DomainParticipantImpl.h.

Constructor & Destructor Documentation

◆ LivelinessTimer()

OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::LivelinessTimer ( DomainParticipantImpl impl,
DDS::LivelinessQosPolicyKind  kind 
)

◆ ~LivelinessTimer()

OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::~LivelinessTimer ( )
virtual

Definition at line 2329 of file DomainParticipantImpl.cpp.

2330 {
2331 }

Member Function Documentation

◆ add_adjust()

void OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::add_adjust ( OpenDDS::DCPS::DataWriterImpl writer)

Definition at line 2334 of file DomainParticipantImpl.cpp.

References ACE_GUARD, cancel(), interval_, kind_, last_liveliness_check_, OpenDDS::DCPS::DataWriterImpl::liveliness_check_interval(), lock_, OpenDDS::DCPS::TimePoint_T< MonotonicClock >::now(), schedule(), and scheduled_.

2335 {
2336  ACE_GUARD(ACE_Thread_Mutex, guard, lock_);
2337 
2339 
2340  // Calculate the time remaining to liveliness check.
2341  const TimeDuration remaining = interval_ - (now - last_liveliness_check_);
2342 
2343  // Adopt a smaller interval.
2344  interval_ = std::min(interval_, writer->liveliness_check_interval(kind_));
2345 
2346  // Reschedule or schedule a timer if necessary.
2347  if (scheduled_ && interval_ < remaining) {
2348  cancel();
2349  schedule(interval_);
2350  } else if (!scheduled_) {
2351  schedule(interval_);
2352  scheduled_ = true;
2353  last_liveliness_check_ = now;
2354  }
2355 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
static TimePoint_T< MonotonicClock > now()
Definition: TimePoint_T.inl:41
TimePoint_T< MonotonicClock > MonotonicTimePoint
Definition: TimeTypes.h:51
virtual void schedule(const TimeDuration &interval)=0
TimeDuration liveliness_check_interval(DDS::LivelinessQosPolicyKind kind)

◆ cancel()

virtual void OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::cancel ( )
pure virtual

◆ dispatch()

virtual void OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::dispatch ( const MonotonicTimePoint tv)
pure virtual

◆ execute()

void OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::execute ( const MonotonicTimePoint now)

Definition at line 2365 of file DomainParticipantImpl.cpp.

References ACE_GUARD, dispatch(), impl_, interval(), interval_, OpenDDS::DCPS::TimeDuration::is_max(), kind_, last_liveliness_check_, OpenDDS::DCPS::DomainParticipantImpl::liveliness_check_interval(), lock_, recalculate_interval_, schedule(), and scheduled_.

2366 {
2367  ACE_GUARD(ACE_Thread_Mutex, guard, lock_);
2368 
2369  if (recalculate_interval_) {
2371  TimeDuration interval;
2372  while (recalculate_interval_) {
2373  recalculate_interval_ = false;
2374  ACE_GUARD(ACE_Reverse_Lock<ACE_Thread_Mutex>, rev_guard, rev_lock);
2376  }
2377  interval_ = interval;
2378  }
2379 
2380  scheduled_ = false;
2381 
2382  if (!interval_.is_max()) {
2383  dispatch(now);
2384  last_liveliness_check_ = now;
2386  scheduled_ = true;
2387  }
2388 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
TimeDuration liveliness_check_interval(DDS::LivelinessQosPolicyKind kind)
virtual void dispatch(const MonotonicTimePoint &tv)=0
virtual void schedule(const TimeDuration &interval)=0

◆ interval()

TimeDuration OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::interval ( void  ) const
inlineprotected

◆ remove_adjust()

void OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::remove_adjust ( )

Definition at line 2358 of file DomainParticipantImpl.cpp.

References ACE_GUARD, lock_, and recalculate_interval_.

◆ schedule()

virtual void OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::schedule ( const TimeDuration interval)
protectedpure virtual

Member Data Documentation

◆ impl_

DomainParticipantImpl& OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::impl_
protected

◆ interval_

TimeDuration OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::interval_
private

Definition at line 598 of file DomainParticipantImpl.h.

Referenced by add_adjust(), and execute().

◆ kind_

const DDS::LivelinessQosPolicyKind OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::kind_
protected

◆ last_liveliness_check_

MonotonicTimePoint OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::last_liveliness_check_
private

Definition at line 600 of file DomainParticipantImpl.h.

Referenced by add_adjust(), and execute().

◆ lock_

ACE_Thread_Mutex OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::lock_
private

Definition at line 602 of file DomainParticipantImpl.h.

Referenced by add_adjust(), execute(), and remove_adjust().

◆ recalculate_interval_

bool OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::recalculate_interval_
private

Definition at line 599 of file DomainParticipantImpl.h.

Referenced by execute(), and remove_adjust().

◆ scheduled_

bool OpenDDS::DCPS::DomainParticipantImpl::LivelinessTimer::scheduled_
private

Definition at line 601 of file DomainParticipantImpl.h.

Referenced by add_adjust(), and execute().


The documentation for this class was generated from the following files: