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