📄 simeventscheduler.cpp
字号:
#include "SimEvent.h"
#include "SimEventScheduler.h"
#include "BT.h"
#include "Sysparameter.h"
#include "Statistic.h"
#include <iostream>
bool lessTimeStamp::operator()( SimEvent* const& event1, SimEvent* const& event2) const{
if( event1->getTimeStamp() == event2->getTimeStamp())
return event1->getEventID() > event2->getEventID();
else
return event1->getTimeStamp() > event2->getTimeStamp();
}
SimEventScheduler::SimEventScheduler(void){
mCurrent = 0;
make_heap(mEventQueue.begin(), mEventQueue.end(), lessTimeStamp());
mTimeCount = 0;
}
bool SimEventScheduler::enqueue(SimEvent *event){
if( event->getTimeStamp() < mCurrent){
printf("enqueue:event time%f less than current %f\n", event->getTimeStamp(), mCurrent);
exit(-1);
}
event->SetEventID();
mEventQueue.push_back(event);
push_heap(mEventQueue.begin(), mEventQueue.end(), lessTimeStamp());
return true;
}
SimEvent* SimEventScheduler::dequeue(void){
SimEvent* event = mEventQueue.front();
pop_heap(mEventQueue.begin(), mEventQueue.end(), lessTimeStamp());
mEventQueue.pop_back();
if(event == NULL){
printf("SimEventScheduler:dequeue: no event\n");
exit(-1);
}
if( event->getTimeStamp() < mCurrent){
printf("dequeue:event time%f less than current %f\n", event->getTimeStamp(), mCurrent);
exit(-1);
}
mCurrent = event->getTimeStamp();
if( PRINT_STATISTIC_ON && mCurrent - mTimeCount > PRINTINTERVAL ){
statistic.printDownloadingInfo();
mTimeCount = mCurrent;
}
return event;
}
bool SimEventScheduler::cancel(SimEvent* event){
if( event == NULL)
return false;
if( event->getTimeStamp() < mCurrent){
printf("cancel:event time%f less than current %f event type %d\n", event->getTimeStamp(), mCurrent, event->getType());
return false;
}
vector<SimEvent*>::iterator pos;
pos = find( mEventQueue.begin(), mEventQueue.end(), event);
if( pos != mEventQueue.end()){
mEventQueue.erase(pos);
make_heap(mEventQueue.begin(), mEventQueue.end(), lessTimeStamp());
}
return true;
}
void SimEventScheduler::run(void){
while( mEventQueue.size() > 0){
SimEvent* event = dequeue();
event->dispatch();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -