IT++ Logo Newcom Logo

events.cpp

Go to the documentation of this file.
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
SourceForge Logo

Generated on Sat Aug 25 23:40:04 2007 for IT++ by Doxygen 1.5.2