31 struct EventMemberImplObjTraits<
std::function<void()>> {
32 typedef std::function<void()> T;
48 Scheduler::EventInfo::EventInfo(
const time::nanoseconds& after,
50 : m_scheduledTime(
time::steady_clock::now() + after)
56 const EventInfo& previousEvent)
57 : m_scheduledTime(when)
58 , m_event(previousEvent.m_event)
59 , m_eventId(previousEvent.m_eventId)
64 Scheduler::EventInfo::expiresFromNow()
const 67 if (now > m_scheduledTime)
68 return time::seconds(0);
70 return m_scheduledTime - now;
74 Scheduler::Scheduler(boost::asio::io_service& ioService)
75 : m_scheduledEvent(m_events.end())
87 EventId eventId = std::make_shared<ns3::EventId>();
88 weak_ptr<ns3::EventId> eventWeak = eventId;
89 std::function<void()> eventWithCleanup = [
this, event, eventWeak] () {
91 shared_ptr<ns3::EventId> eventId = eventWeak.lock();
92 if (eventId !=
nullptr) {
93 this->m_events.erase(eventId);
97 ns3::EventId id = ns3::Simulator::Schedule(ns3::NanoSeconds(after.count()),
98 &std::function<
void()>::operator(), eventWithCleanup);
99 *eventId = std::move(
id);
100 m_events.insert(eventId);
108 if (eventId !=
nullptr) {
109 ns3::Simulator::Remove(*eventId);
110 const_cast<EventId&
>(eventId).reset();
111 m_events.erase(eventId);
118 for (
auto i = m_events.begin(); i != m_events.end(); ) {
121 if ((*i) !=
nullptr) {
122 ns3::Simulator::Remove((**i));
123 const_cast<EventId&
>(*i).reset();
Copyright (c) 2011-2015 Regents of the University of California.
static time_point now() noexcept
EventId scheduleEvent(const time::nanoseconds &after, const Event &event)
Schedule one time event after the specified delay.
void cancelEvent(const EventId &eventId)
Cancel scheduled event.
void cancelAllEvents()
Cancel all scheduled events.
std::shared_ptr< ns3::EventId > EventId
Opaque type (shared_ptr) representing ID of a scheduled event.
Copyright (c) 2011-2015 Regents of the University of California.