基本可以照搬里面的Sleep模式去写
我要写的是充电模型
1.定时器类重载
在wireless-phy.h中添加
class Charge_Timer : public TimerHandler {
public:
Charge_Timer(WirelessPhy *a) : TimerHandler() { a_ = a; }
protected:
virtual void expire(Event *e);
WirelessPhy *a_;
};
2.定时器执行
在wireless-phy.cc中添加
void Charge_Timer::expire(Event *) {
a_->UpdateChargeEnergy();
}
进而我的UpdateChargeEnergy()为:
void WirelessPhy::UpdateChargeEnergy()
{
if(em() == NULL) {
return;
}
em()->ChargeEnergy(0.5, 0.5);
charge_timer_.resched(0.5);
}
其中的ChargeEnergy就是在energy-model中定义的,
void EnergyModel::ChargeEnergy(double periodtime,double P_charge)
{
double dEng = periodtime * P_charge;
if(energy_+dEng >= maxenergy_)
energy_ = maxenergy_;
else
energy_ += dEng;
}
3.定时器声明:
wireless-phy.h中class WirelessPhy : public Phy 中定义
friend class Charge_Timer;
Charge_Timer charge_timer_;
4.定时器开启
我在wireless-phy.cc里 WirelessPhy的构造函数中添加了
charge_timer_.resched(0.5);
最初的构造也要有WirelessPhy::WirelessPhy() : Phy(), sleep_timer_(this), charge_timer_(this),status_(IDLE)
总之,一切都与sleep_timer相仿。
OK ,定时器完成!