IT++ Logo
events.cpp
Go to the documentation of this file.
00001 
00029 #include <itpp/protocol/events.h>
00030 
00031 
00032 namespace itpp
00033 {
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
SourceForge Logo

Generated on Wed Jul 27 2011 16:27:05 for IT++ by Doxygen 1.7.4