00001 00030 #include <itpp/protocol/events.h> 00031 00032 00033 namespace itpp { 00034 00035 Ttype Event_Queue::t = 0; 00036 00037 unsigned long long int Base_Event::global_id = 0; 00038 00039 std::priority_queue<Base_Event*, 00040 std::deque<Base_Event*, std::allocator<Base_Event*> >, 00041 Compare_Base_Event_Times> Event_Queue::event_queue; 00042 00043 bool Event_Queue::keep_running = false; 00044 00045 void Event_Queue::add(Base_Event *e) 00046 { 00047 e->expire_t = t + e->delta_t; 00048 event_queue.push(e); 00049 } 00050 00051 void Event_Queue::_run() 00052 { 00053 while(!event_queue.empty() && keep_running) { 00054 Base_Event* e = event_queue.top(); // Next event to process. 00055 event_queue.pop(); // Remove event. 00056 00057 if(e->active) { // Only process active events. 00058 t = e->expire_t; // Update current time. 00059 e->exec(); // Execute the event. 00060 } 00061 00062 delete e; // This event is history! 00063 } 00064 00065 } 00066 00067 void Event_Queue::start() 00068 { 00069 keep_running = true; 00070 _run(); 00071 } 00072 00073 void Event_Queue::stop() 00074 { 00075 keep_running = false; 00076 } 00077 00078 void Event_Queue::clear() 00079 { 00080 stop(); 00081 Base_Event* e; 00082 00083 while(!event_queue.empty()) { 00084 e = event_queue.top(); 00085 delete e; 00086 event_queue.pop(); 00087 } 00088 00089 t = 0; 00090 } 00091 00092 // void Event_Queue::cancel_all(BaseSignal *s){ 00093 00094 // } 00095 00096 00097 } // namespace itpp
Generated on Mon Jan 7 22:28:58 2008 for IT++ by Doxygen 1.5.4