A simple virtual Timer class. More...
#include "timer.h"
Public Types | |
enum | DestroyPolicy { CANCEL_ON_DESTROY = (1 << 3) , REMOVE_ON_DESTROY = (1 << 4) , CHECK_ON_DESTROY = (1 << 5) } |
The policy to use to manager the internal timer when an instance of the Timer class is destroyed or suspended. More... | |
enum | State { RUNNING , EXPIRED , SUSPENDED } |
The possible states of the Timer. More... | |
Public Member Functions | |
Timer () | |
Create a timer with a default event lifetime management policy: | |
Timer (DestroyPolicy destroyPolicy) | |
~Timer () | |
void | Cancel () |
Cancel the currently-running event if there is one. | |
Time | GetDelay () const |
Time | GetDelayLeft () const |
Timer::State | GetState () const |
bool | IsExpired () const |
bool | IsRunning () const |
bool | IsSuspended () const |
void | Remove () |
Remove from the simulation event-list the currently-running event if there is one. | |
void | Resume () |
Restart the timer to expire within the amount of time left saved during Suspend. | |
void | Schedule () |
Schedule a new event using the currently-configured delay, function, and arguments. | |
void | Schedule (Time delay) |
template<typename... Ts> | |
void | SetArguments (Ts... args) |
void | SetDelay (const Time &delay) |
template<typename FN > | |
void | SetFunction (FN fn) |
template<typename MEM_PTR , typename OBJ_PTR > | |
void | SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr) |
void | Suspend () |
Pause the timer and save the amount of time left until it was set to expire. | |
Private Attributes | |
Time | m_delay |
The delay configured for this Timer. | |
Time | m_delayLeft |
The amount of time left on the Timer while it is suspended. | |
EventId | m_event |
The future event scheduled to expire the timer. | |
int | m_flags |
Bitfield for Timer State, DestroyPolicy and InternalSuspended. | |
internal::TimerImpl * | m_impl |
The timer implementation, which contains the bound callback function and arguments. | |
Static Private Attributes | |
static constexpr auto | TIMER_SUSPENDED {1 << 7} |
Internal bit marking the suspended timer state. | |
A simple virtual Timer class.
A (virtual time) timer is used to hold together a delay, a function to invoke when the delay expires, and a set of arguments to pass to the function when the delay expires.
A Timer can be suspended, resumed, cancelled and queried for the time left, but it can't be extended (except by suspending and resuming).
A timer can also be used to enforce a set of predefined event lifetime management policies. These policies are specified at construction time and cannot be changed after.
The policy to use to manager the internal timer when an instance of the Timer class is destroyed or suspended.
In the case of suspension, only CANCEL_ON_DESTROY
and REMOVE_ON_DESTROY
apply.
These symbols have "Destroy" in their names for historical reasons.
Enumerator | |
---|---|
CANCEL_ON_DESTROY | This policy cancels the event from the destructor of the Timer or from Suspend(). This is typically faster than |
REMOVE_ON_DESTROY | This policy removes the event from the simulation event list when the destructor of the Timer is invoked, or the Timer is suspended. This is typically slower than Cancel, but frees memory. |
CHECK_ON_DESTROY | This policy enforces a check from the destructor of the Timer to verify that the timer has already expired. |
enum ns3::Timer::State |
ns3::Timer::Timer | ( | ) |
Create a timer with a default event lifetime management policy:
Definition at line 25 of file timer.cc.
References NS_LOG_FUNCTION.
ns3::Timer::Timer | ( | DestroyPolicy | destroyPolicy | ) |
[in] | destroyPolicy | the event lifetime management policies to use for destroy events |
Definition at line 34 of file timer.cc.
References NS_LOG_FUNCTION.
ns3::Timer::~Timer | ( | ) |
Definition at line 43 of file timer.cc.
References ns3::EventId::Cancel(), CANCEL_ON_DESTROY, CHECK_ON_DESTROY, ns3::EventId::IsPending(), m_event, m_flags, m_impl, NS_FATAL_ERROR, NS_LOG_FUNCTION, ns3::EventId::Remove(), and REMOVE_ON_DESTROY.
void ns3::Timer::Cancel | ( | ) |
Cancel the currently-running event if there is one.
Do nothing otherwise.
Definition at line 97 of file timer.cc.
References ns3::EventId::Cancel(), m_event, and NS_LOG_FUNCTION.
Referenced by ns3::TcpSocketBase::CancelAllTimers(), TimerStateTestCase::DoRun(), ns3::aodv::RoutingProtocol::HelloTimerExpire(), ns3::aodv::RoutingProtocol::NotifyInterfaceDown(), ns3::aodv::RoutingProtocol::NotifyRemoveAddress(), ns3::aodv::Neighbors::Purge(), ns3::dsr::DsrRouteCache::PurgeMac(), ns3::aodv::RoutingProtocol::RecvReplyAck(), ns3::TcpSocketBase::ReTxTimeout(), ns3::aodv::Neighbors::ScheduleTimer(), ns3::dsr::DsrRouteCache::ScheduleTimer(), ns3::dsr::DsrRouting::SendBuffTimerExpire(), ns3::Ipv6AutoconfiguredPrefix::StopPreferredTimer(), and ns3::Ipv6AutoconfiguredPrefix::StopValidTimer().
Time ns3::Timer::GetDelay | ( | ) | const |
Definition at line 72 of file timer.cc.
References m_delay, and NS_LOG_FUNCTION.
Time ns3::Timer::GetDelayLeft | ( | ) | const |
This method returns zero if the timer is in EXPIRED state.
Definition at line 79 of file timer.cc.
References EXPIRED, ns3::Simulator::GetDelayLeft(), GetState(), m_delayLeft, m_event, NS_ASSERT, NS_LOG_FUNCTION, RUNNING, and SUSPENDED.
Referenced by ns3::dsdv::RoutingProtocol::RecvDsdv(), ns3::TcpSocketBase::SendPendingData(), ns3::aodv::RoutingProtocol::SendRequest(), ns3::aodv::RoutingProtocol::SendRerrMessage(), and ns3::aodv::RoutingProtocol::SendRerrWhenNoRouteToForward().
Timer::State ns3::Timer::GetState | ( | ) | const |
Definition at line 132 of file timer.cc.
References EXPIRED, IsExpired(), IsRunning(), IsSuspended(), NS_ASSERT, NS_LOG_FUNCTION, RUNNING, and SUSPENDED.
Referenced by TimerStateTestCase::DoRun(), and GetDelayLeft().
bool ns3::Timer::IsExpired | ( | ) | const |
true
if there is no currently-running event, false
otherwise. Definition at line 111 of file timer.cc.
References ns3::EventId::IsExpired(), IsSuspended(), m_event, and NS_LOG_FUNCTION.
Referenced by TimerStateTestCase::DoRun(), GetState(), ns3::TcpSocketBase::SendDataPacket(), and ns3::TcpSocketBase::SendPendingData().
bool ns3::Timer::IsRunning | ( | ) | const |
true
if there is a currently-running event, false
otherwise. Definition at line 118 of file timer.cc.
References ns3::EventId::IsPending(), IsSuspended(), m_event, and NS_LOG_FUNCTION.
Referenced by TimerStateTestCase::DoRun(), GetState(), ns3::olsr::RoutingProtocol::QueueMessage(), ns3::dsr::DsrRouting::SendBuffTimerExpire(), ns3::TcpSocketBase::SendPendingData(), ns3::aodv::RoutingProtocol::SendRerrMessage(), ns3::aodv::RoutingProtocol::SendRerrWhenNoRouteToForward(), ns3::Ipv6AutoconfiguredPrefix::StopPreferredTimer(), ns3::Ipv6AutoconfiguredPrefix::StopValidTimer(), and Suspend().
bool ns3::Timer::IsSuspended | ( | ) | const |
true
if this timer was suspended and not yet resumed, false
otherwise. Definition at line 125 of file timer.cc.
References m_flags, NS_LOG_FUNCTION, and TIMER_SUSPENDED.
Referenced by ns3::dsr::DsrRouting::CheckSendBuffer(), TimerStateTestCase::DoRun(), GetState(), IsExpired(), and IsRunning().
void ns3::Timer::Remove | ( | ) |
Remove from the simulation event-list the currently-running event if there is one.
Do nothing otherwise.
Definition at line 104 of file timer.cc.
References m_event, NS_LOG_FUNCTION, and ns3::EventId::Remove().
void ns3::Timer::Resume | ( | ) |
Restart the timer to expire within the amount of time left saved during Suspend.
Calling Resume without a prior call to Suspend is an error.
Definition at line 187 of file timer.cc.
References m_delayLeft, m_event, m_flags, m_impl, NS_ASSERT, NS_LOG_FUNCTION, ns3::internal::TimerImpl::Schedule(), and TIMER_SUSPENDED.
Referenced by ns3::dsr::DsrRouting::CheckSendBuffer(), and TimerStateTestCase::DoRun().
void ns3::Timer::Schedule | ( | ) |
Schedule a new event using the currently-configured delay, function, and arguments.
Definition at line 151 of file timer.cc.
References m_delay, NS_LOG_FUNCTION, and Schedule().
Referenced by ns3::dsr::DsrRouting::DsrRouting(), ns3::aodv::RoutingProtocol::DoInitialize(), TimerStateTestCase::DoRun(), TimerTemplateTestCase::DoRun(), ns3::aodv::RoutingProtocol::HelloTimerExpire(), ns3::olsr::RoutingProtocol::HelloTimerExpire(), ns3::olsr::RoutingProtocol::HnaTimerExpire(), ns3::olsr::RoutingProtocol::MidTimerExpire(), ns3::aodv::Neighbors::Purge(), ns3::dsr::DsrRouteCache::PurgeMac(), ns3::olsr::RoutingProtocol::QueueMessage(), ns3::aodv::RoutingProtocol::RerrRateLimitTimerExpire(), ns3::aodv::RoutingProtocol::RreqRateLimitTimerExpire(), Schedule(), ns3::aodv::Neighbors::ScheduleTimer(), ns3::dsr::DsrRouteCache::ScheduleTimer(), ns3::dsr::DsrRouting::SendBuffTimerExpire(), ns3::TcpSocketBase::SendDataPacket(), ns3::TcpSocketBase::SendPendingData(), ns3::dsdv::RoutingProtocol::SendPeriodicUpdate(), ns3::aodv::RoutingProtocol::Start(), ns3::dsdv::RoutingProtocol::Start(), ns3::Ipv6AutoconfiguredPrefix::StartPreferredTimer(), ns3::Ipv6AutoconfiguredPrefix::StartValidTimer(), and ns3::olsr::RoutingProtocol::TcTimerExpire().
void ns3::Timer::Schedule | ( | Time | delay | ) |
[in] | delay | the delay to use |
Schedule a new event using the specified delay (ignore the delay set by Timer::SetDelay), function, and arguments.
Definition at line 158 of file timer.cc.
References ns3::EventId::IsPending(), m_event, m_impl, NS_ASSERT, NS_FATAL_ERROR, NS_LOG_FUNCTION, and ns3::internal::TimerImpl::Schedule().
void ns3::Timer::SetArguments | ( | Ts... | args | ) |
Ts | [deduced] Argument types |
[in] | args | arguments |
Store these arguments in this Timer for later use by Timer::Schedule.
Definition at line 284 of file timer.h.
References m_impl, NS_FATAL_ERROR, and ns3::internal::TimerImpl::SetArgs().
Referenced by TimerStateTestCase::DoRun(), TimerTemplateTestCase::DoRun(), and ns3::aodv::RoutingProtocol::SendReplyByIntermediateNode().
void ns3::Timer::SetDelay | ( | const Time & | delay | ) |
[in] | delay | The delay |
The next call to Schedule will schedule the timer with this delay.
Definition at line 65 of file timer.cc.
References m_delay, and NS_LOG_FUNCTION.
Referenced by ns3::dsr::DsrRouteCache::DsrRouteCache(), ns3::aodv::Neighbors::Neighbors(), TimerStateTestCase::DoRun(), TimerTemplateTestCase::DoRun(), ns3::olsr::RoutingProtocol::QueueMessage(), ns3::aodv::RoutingProtocol::SendReplyByIntermediateNode(), ns3::Ipv6AutoconfiguredPrefix::StartPreferredTimer(), and ns3::Ipv6AutoconfiguredPrefix::StartValidTimer().
void ns3::Timer::SetFunction | ( | FN | fn | ) |
FN | [deduced] The type of the function. |
[in] | fn | the function |
Store this function in this Timer for later use by Timer::Schedule.
Definition at line 268 of file timer.h.
References m_impl, and ns3::internal::MakeTimerImpl().
Referenced by ns3::dsr::DsrRouteCache::DsrRouteCache(), ns3::dsr::DsrRouting::DsrRouting(), ns3::aodv::Neighbors::Neighbors(), ns3::TcpSocketBase::TcpSocketBase(), ns3::TcpSocketBase::TcpSocketBase(), ns3::aodv::RoutingProtocol::DoInitialize(), TimerStateTestCase::DoRun(), TimerTemplateTestCase::DoRun(), ns3::dsr::DsrRouting::ScheduleLinkPacketRetry(), ns3::dsr::DsrRouting::ScheduleNetworkPacketRetry(), ns3::aodv::RoutingProtocol::ScheduleRreqRetry(), ns3::aodv::RoutingProtocol::SendReplyByIntermediateNode(), ns3::olsr::RoutingProtocol::SetIpv4(), ns3::aodv::RoutingProtocol::Start(), ns3::dsdv::RoutingProtocol::Start(), ns3::Ipv6AutoconfiguredPrefix::StartPreferredTimer(), and ns3::Ipv6AutoconfiguredPrefix::StartValidTimer().
void ns3::Timer::SetFunction | ( | MEM_PTR | memPtr, |
OBJ_PTR | objPtr ) |
MEM_PTR | [deduced] The type of the class member function. |
OBJ_PTR | [deduced] The type of the class instance pointer. |
[in] | memPtr | the member function pointer |
[in] | objPtr | the pointer to object |
Store this function and object in this Timer for later use by Timer::Schedule.
Definition at line 276 of file timer.h.
References m_impl, and ns3::internal::MakeTimerImpl().
void ns3::Timer::Suspend | ( | ) |
Pause the timer and save the amount of time left until it was set to expire.
Subsequently calling Resume() will restart the Timer with the remaining time.
The DestroyPolicy set at construction determines whether the underlying Simulator::Event is cancelled or removed.
Calling Suspend on a non-running timer is an error.
Definition at line 170 of file timer.cc.
References ns3::EventId::Cancel(), CANCEL_ON_DESTROY, ns3::Simulator::GetDelayLeft(), IsRunning(), m_delayLeft, m_event, m_flags, NS_ASSERT, NS_LOG_FUNCTION, ns3::EventId::Remove(), REMOVE_ON_DESTROY, and TIMER_SUSPENDED.
Referenced by ns3::dsr::DsrRouting::CheckSendBuffer(), and TimerStateTestCase::DoRun().
|
private |
The delay configured for this Timer.
Definition at line 243 of file timer.h.
Referenced by GetDelay(), Schedule(), and SetDelay().
|
private |
|
private |
The future event scheduled to expire the timer.
Definition at line 245 of file timer.h.
Referenced by ~Timer(), Cancel(), GetDelayLeft(), IsExpired(), IsRunning(), Remove(), Resume(), Schedule(), and Suspend().
|
private |
Bitfield for Timer State, DestroyPolicy and InternalSuspended.
Definition at line 241 of file timer.h.
Referenced by ~Timer(), IsSuspended(), Resume(), and Suspend().
|
private |
The timer implementation, which contains the bound callback function and arguments.
Definition at line 250 of file timer.h.
Referenced by ~Timer(), Resume(), Schedule(), SetArguments(), SetFunction(), and SetFunction().
|
staticconstexprprivate |
Internal bit marking the suspended timer state.
Definition at line 230 of file timer.h.
Referenced by IsSuspended(), Resume(), and Suspend().