33#include "ns3/core-module.h"
66 m_interval = interval;
68 m_rng = CreateObject<ExponentialRandomVariable>();
69 m_rng->SetAttribute(
"Mean",
DoubleValue(m_wait.GetSeconds()));
85 double delta = m_rng->GetValue();
89 Simulator::Schedule(delay, &Hold::Event,
this);
93 bool even = (ratio.
GetHigh() % 2);
94 Time work = m_wait * (even ? 3 : 1);
95 std::this_thread::sleep_for(std::chrono::nanoseconds(work.
GetNanoSeconds()));
111main(
int argc,
char** argv)
119 cmd.AddValue(
"stop",
"Simulation duration in virtual time.", stop);
120 cmd.AddValue(
"interval",
"Approximate reporting interval, in wall clock time.", interval);
121 cmd.AddValue(
"wait",
"Wallclock time to burn on each event.", wait);
122 cmd.AddValue(
"verbose",
"Turn on verbose progress message.",
verbose);
123 cmd.Parse(argc, argv);
126 <<
cmd.GetName() <<
":\n"
128 <<
"verbose progress message: " << (
verbose ?
"on\n" :
"off\n")
129 <<
"target reporting interval: " << interval.
As(Time::S) <<
"\n"
130 <<
"average event sleep time: " << wait.
As(Time::MS) <<
"\n"
131 <<
"total simulation run time: " << stop.
As(Time::S) << std::endl;
133 Ptr<Hold> h = Create<Hold>(wait, interval);
136 Simulator::Stop(stop);
141 Simulator::Destroy();
Execute a function periodically, which takes more or less time to run.
Time m_interval
Time between switching workloads.
void Event()
The Hold event.
Ptr< RandomVariableStream > m_rng
The random number generator for the interval between events.
Hold(Ptr< RandomVariableStream > rng)
Create a hold with a specified random number generator for the wait time.
Time m_wait
Mean inter-event time.
Hold(Time wait, Time interval)
Create a Hold with mean inter-event time wait, changing workload every interval.
Parse command-line arguments.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Periodically print a status message indicating simulator progress.
void SetVerbose(bool verbose)
Set verbose mode to print real and virtual time intervals.
A template-based reference counting class.
Simulation virtual time values and global simulation resolution.
int64_t GetNanoSeconds() const
Get an approximation of the time stored in this instance in the indicated unit.
TimeWithUnit As(const enum Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
High precision numerical type, implementing Q64.64 fixed precision.
int64_t GetHigh() const
Get the integer portion.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Time Now()
create an ns3::Time instance which contains the current simulation time.
Time Seconds(double value)
Construct a Time in the indicated unit.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.