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   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
SourceForge Logo

Generated on Sun Sep 14 18:57:05 2008 for IT++ by Doxygen 1.5.6