34 #include "ns3/core-module.h"
68 m_interval = interval;
70 m_rng = CreateObject<ExponentialRandomVariable> ();
71 m_rng->SetAttribute (
"Mean",
DoubleValue (m_wait.GetSeconds ()));
86 double delta = m_rng->GetValue ();
94 bool even = (ratio.
GetHigh () % 2);
95 Time work = m_wait * (even ? 3 : 1);
96 std::this_thread::sleep_for (std::chrono::nanoseconds (work.
GetNanoSeconds ()));
113 main (
int argc,
char ** argv)
121 cmd.AddValue (
"stop",
"Simulation duration in virtual time.", stop);
122 cmd.AddValue (
"interval",
"Approximate reporting interval, in wall clock time.", interval);
123 cmd.AddValue (
"wait",
"Wallclock time to burn on each event.", wait);
124 cmd.AddValue (
"verbose",
"Turn on verbose progress message.",
verbose);
125 cmd.Parse (argc, argv);
128 <<
cmd.GetName () <<
":\n"
130 <<
"verbose progress message: " << (
verbose ?
"on\n" :
"off\n")
131 <<
"target reporting interval: " << interval.
As (
Time::S) <<
"\n"
132 <<
"average event sleep time: " << wait.
As (
Time::MS) <<
"\n"
133 <<
"total simulation run time: " << stop.
As (
Time::S)
136 Ptr<Hold> h = Create<Hold> (wait, interval);
Execute a function periodically, which takes more or less time to run.
void Event(void)
The Hold event.
Time m_interval
Time between switching workloads.
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.
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Run(void)
Run the simulation.
static Time Now(void)
Return the current simulation virtual time.
Simulation virtual time values and global simulation resolution.
TimeWithUnit As(const enum Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
int64_t GetNanoSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
High precision numerical type, implementing Q64.64 fixed precision.
int64_t GetHigh(void) 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 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.
rng
Random number generator.