--- a/src/spectrum/model/spectrum-analyzer.cc +++ a/src/spectrum/model/spectrum-analyzer.cc @@ -41,7 +41,7 @@ m_spectrumModel (0), m_sumPowerSpectralDensity (0), m_resolution (MilliSeconds (50)), - m_active (false) + m_reportEvent () { NS_LOG_FUNCTION (this); } @@ -63,6 +63,10 @@ m_spectrumModel = 0; m_sumPowerSpectralDensity = 0; m_energySpectralDensity = 0; + if (m_reportEvent.IsRunning ()) + { + m_reportEvent.Cancel (); + } SpectrumPhy::DoDispose (); } @@ -208,15 +212,12 @@ (*avgPowerSpectralDensity) += m_noisePowerSpectralDensity; (*m_energySpectralDensity) = 0; + m_reportEvent = Simulator::Schedule (m_resolution, &SpectrumAnalyzer::GenerateReport, this); + NS_LOG_INFO ("generating report"); m_averagePowerSpectralDensityReportTrace (avgPowerSpectralDensity); *avgPowerSpectralDensity = 0; - - if (m_active) - { - Simulator::Schedule (m_resolution, &SpectrumAnalyzer::GenerateReport, this); - } } @@ -239,11 +240,9 @@ SpectrumAnalyzer::Start () { NS_LOG_FUNCTION (this); - if (!m_active) + if (!m_reportEvent.IsRunning ()) { - NS_LOG_LOGIC ("activating"); - m_active = true; - Simulator::Schedule (m_resolution, &SpectrumAnalyzer::GenerateReport, this); + m_reportEvent = Simulator::Schedule (m_resolution, &SpectrumAnalyzer::GenerateReport, this); } } @@ -251,7 +250,7 @@ void SpectrumAnalyzer::Stop () { - m_active = false; + m_reportEvent.Cancel (); } } // namespace ns3 --- a/src/spectrum/model/spectrum-analyzer.h +++ a/src/spectrum/model/spectrum-analyzer.h @@ -131,7 +131,7 @@ double m_noisePowerSpectralDensity; //!< Noise power spectral density Time m_resolution; //!< Time resolution Time m_lastChangeTime; //!< When the last update happened - bool m_active; //!< True if the analyzer is active + EventId m_reportEvent; //!< Report event /// TracedCallback - average power spectral density report. TracedCallback > m_averagePowerSpectralDensityReportTrace;