参考链接:
https://blog.csdn.net/rustfree/article/details/84558058
https://blog.csdn.net/u013618190/article/details/88085152#commentBox
ns3 simulator离散模拟机制_Hesy_H的博客-CSDN博客
概念:
(1)模拟器对象(Simulator),该对象可以访问事件队列,并可以管理事件的执行。
(2)调度器(Scheduler),负责插入和删除队列中的事件。
(3)Time: 一种表示模拟时间的方式。
(4)事件本身,通常是某个函数。
1. Time
NS3的Time类可以用来标识仿真时间,也可以对仿真的时间精度进行修改。默认时间精度是“纳秒ns”。如果程序中需要使用更高的时间精度(如皮秒)时,一定要记得在程序开始时调整时间精度,否则将会出现以下问题:
当执行PicoSecond(1).GetPicoSeconds(),会返回0,因为此时的时间精度不够。
要想使用皮秒级时间精度,可以用以下命令进行调整:
Time::SetResolution (Time::PS);
值得注意的是,提高时间精度意味着减小了仿真的时间范围。因为全局仿真时间变量为64bits整数型数据,数据最大值为2^64。当时间精度为皮秒时,最大仿真时间为2^64ps。
最后,需要提醒一下,不要在创建时间对象之后修改仿真时间精度!如果在调用Time::SetResolution之前创建了时间对象,这些对象都始终为更新精度之前的数值,在数值不变,时间精度发生改变的情况下就会引起错误。
下面给出几个提取仿真时间的例子
例1:提取当前仿真时间(使用默认时间精度ns)
uint64_t now = Simulator::Now().GetNanoSeconds();
例2:仿真时间可以进行算术运算和对比等操作。此处为仿真时间对比示例,定义一个结束时间,判断当前仿真时间是否到达结束时间,如果当前仿真时间小于结束时间则进一步执行相关操作。
Time m_endtime = MicroSeconds(2);
...
if( m_endtime.Compare(Simulator::Now()) == 1 )
{
...
}
Time::Compare函数功能是判断m_endtime与Simulator::Now()大小,该函数在NS3的nstime.h文件中
inline int Compare (const Time &o) const
{
return (m_data < o.m_data) ? -1 : (m_data == o.m_data) ? 0 : 1;
}
此时m_data为m_endtime时间,o.m_data为Simulator::Now()时间。
当m_endtime < Simulator::Now()时 返回 -1;
当m_endtime = Simulator::Now()时 返回 0;
当m_endtime > Simulator::Now()时 返回 1;
因此,如果当前仿真时间未达到结束时间时,即m_endtime.Compare(Simulator::Now()) == 1,则继续执行if语句中的操作。
————————————————
版权声明:本文为CSDN博主「Yi Liang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013618190/article/details/88085152