IT++ Logo

events.cpp

Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
SourceForge Logo

Generated on Wed Mar 2 2011 22:05:17 for IT++ by Doxygen 1.7.3