#include <Scheduler.h>
Public Member Functions | |
void | clear () |
void | clear () |
GPStime | elapsed_time () const |
GPStime | elapsed_time () const |
void | endLogging () |
void | endLogging () |
void | printOn (std::ostream &out) const |
void | printOn (std::ostream &out) const |
bool | running () |
bool | running () |
void | schedule (double deltaT, ScheduledEvent *event) |
void | schedule (double deltaT, ScheduledEvent *event) |
Scheduler () | |
Scheduler () | |
void | setLog (std::ostream &out) |
void | setLog (std::ostream &out) |
void | start () |
void | start () |
void | stop () |
void | stop () |
~Scheduler () | |
~Scheduler () | |
Static Public Member Functions | |
Scheduler * | instance () |
Scheduler * | instance () |
Private Attributes | |
std::ostream * | m_log |
std::ostream * | m_log |
bool | m_running |
GPStime | m_time |
Static Private Attributes | |
Scheduler * | s_instance |
Scheduler * | s_instance = 0 |
|
00012 : m_time(GPStime(0)) 00013 , m_running(false) 00014 , m_log(0) 00015 { 00016 assert( s_instance==0); // require only one 00017 s_instance = this; 00018 }
|
|
00021 { 00022 clear(); 00023 }
|
|
|
|
|
|
|
|
00025 { 00026 while( ! empty() ) { 00027 iterator f = begin(); 00028 delete (*f).second; 00029 erase(f); 00030 } 00031 m_time = 0; 00032 }
|
|
00061 {return m_time;}
|
|
00061 {return m_time;}
|
|
|
|
00087 { 00088 m_log = 0; 00089 }
|
|
|
|
00009 {return (s_instance) ? s_instance : new Scheduler();}
|
|
|
|
00067 { 00068 out << "\nScheduler stack: current time = " << elapsed_time() << std::endl; 00069 out << "\ttime\tclass name\n"; 00070 for( const_iterator it= begin(); it !=end(); ++it){ 00071 std::pair<double, ScheduledEvent*> entry = *it; 00072 out << "\t" << entry.first << '\t' << entry.second->name() << std::endl ; 00073 } 00074 out << std::endl; 00075 00076 }
|
|
00055 {return m_running;}
|
|
00055 {return m_running;}
|
|
|
|
00036 { 00037 insert(std::make_pair(m_time+deltaT, event)); 00038 }
|
|
|
|
00079 { 00080 m_log = &out; 00081 out << "\nSchedule event: current time = " << elapsed_time() << std::endl; 00082 out << "\ttime\tEvent\n"; 00083 00084 }
|
|
|
|
00041 { 00042 m_running = true; 00043 00044 while( !empty() && m_running ) { 00045 00046 // get the entry at the head of the queue 00047 std::pair<double, ScheduledEvent*> entry = *begin(); 00048 00049 // set current time, remove the entry 00050 m_time = entry.first; 00051 erase(begin()); 00052 00053 // run, then delete it 00054 if( m_log ) { 00055 (*m_log) << "\t" << entry.first << '\t' << entry.second->name() << std::endl ; 00056 } 00057 entry.second->execute(); 00058 delete entry.second; 00059 } 00060 }
|
|
|
|
00063 { 00064 m_running = false; 00065 }
|
|
|
|
|
|
|
|
|
|
|
|
|