34#include "ns3/core-module.h"
67 m_interval = interval;
69 m_rng = CreateObject<ExponentialRandomVariable> ();
70 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);
115main (
int argc,
char ** argv)
123 cmd.AddValue (
"stop",
"Simulation duration in virtual time.", stop);
124 cmd.AddValue (
"interval",
"Approximate reporting interval, in wall clock time.", interval);
125 cmd.AddValue (
"wait",
"Wallclock time to burn on each event.", wait);
126 cmd.AddValue (
"verbose",
"Turn on verbose progress message.",
verbose);
127 cmd.Parse (argc, argv);
130 <<
cmd.GetName () <<
":\n"
132 <<
"verbose progress message: " << (
verbose ?
"on\n" :
"off\n")
133 <<
"target reporting interval: " << interval.
As (Time::S) <<
"\n"
134 <<
"average event sleep time: " << wait.
As (Time::MS) <<
"\n"
135 <<
"total simulation run time: " << stop.
As (Time::S)
138 Ptr<Hold> h = Create<Hold> (wait, interval);
141 Simulator::Stop (stop);
146 Simulator::Destroy ();
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.
SystemCondition m_condition
Timer to represent workload.
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.
A class which provides a relatively platform-independent conditional-wait thread synchronization prim...
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 Now(void)
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.
rng
Random number generator.