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