VANET仿真-ns3(4)

VANET 仿真

ns3示例代码fourth.cc注释整理,追踪(tracing)与回调。


#include "ns3/object.h"
#include "ns3/uinteger.h"
#include "ns3/traced-value.h" //提供了一系列的数据追踪的方法
#include "ns3/trace-source-accessor.h"

#include <iostream>

using namespace ns3;

class MyObject : public Object
{
public:

// Register this type.
//return The TypeId.
static TypeId GetTypeId (void)
{
static TypeId tid = TypeId ("MyObject")
.SetParent<Object> ()
.SetGroupName ("Tutorial")
.AddConstructor<MyObject> ()
//.AddTraceSource提供了一个外部的钩子(hook),参数分别为:
//1.数据追踪的名字,可以被系统可见
//2.提示信息
//3.&MyObject::m_myInt被追踪的值,是一个类的数据成员
//4.用来生成文档与正确的Callback信息
.AddTraceSource ("MyInteger",
"An integer value to trace.",
MakeTraceSourceAccessor (&MyObject::m_myInt),
"ns3::TracedValueCallback::Int32")
;
return tid;
}

MyObject () {}
//Traceavalue可以用来回调,确定需要追踪的对象属性。
TracedValue<int32_t> m_myInt;
};

//与trace sink匹配的函数,是回调的直接信号,当值发生变化时就需要回调该函数
void
IntTrace (int32_t oldValue, int32_t newValue)
{
std::cout << "Traced " << oldValue << " to " << newValue << std::endl;
}

int
main (int argc, char \*argv[])
{
Ptr<MyObject> myObject = CreateObject<MyObject> ();
//在trace source与trace sink之间建立联系,第一个参数为trace source的名字,第二个为回调
myObject->TraceConnectWithoutContext ("MyInteger", MakeCallback (&IntTrace));

myObject->m_myInt = 1234;
}

当执行代码 myObject->m_myInt = 1234; 时,由于值的改变触发了回调函数,有以下运行结果: