orca-robotics


INTRODUCTION
Overview
Download and Install
Documentation

REPOSITORY
Interfaces
Drivers
Libraries
Utilities
Software Map

DEVELOPER
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

eventscheduler.h

00001 /*
00002  * Orca-Robotics Project: Components for robotics 
00003  *               http://!orca-robotics.sf.net/
00004  * Copyright (c) 2004-2008 Alex Brooks, Alexei Makarenko, Tobias Kaupp
00005  *
00006  * This distribution is licensed to you under the terms described in
00007  * the LICENSE file included in this distribution.
00008  *
00009  */
00010 
00011 #ifndef HYDROICEUTIL_EVENT_SCHEDULER_H
00012 #define HYDROICEUTIL_EVENT_SCHEDULER_H
00013 
00014 #include <gbxsickacfr/gbxutilacfr/tracer.h>
00015 #include <gbxsickacfr/gbxiceutilacfr/thread.h>
00016 #include <hydroiceutil/event.h>
00017 #include <IceUtil/Time.h>
00018 #include <IceUtil/Mutex.h>
00019 #include <map>
00020 
00021 namespace hydroiceutil {
00022 
00029 class EventScheduler : public gbxsickacfr::gbxiceutilacfr::Thread
00030 {
00031 public:
00033     struct Config
00034     {
00035         Config() :
00036             pollIntervalMs(500),
00037 //             lateDispatchToleranceMs(-1),
00038             traceScheduledEvents(false),
00039             traceDispatchedEvents(false) {};
00040 
00042         void validate( gbxsickacfr::gbxutilacfr::Tracer& tracer );
00043 
00046         int pollIntervalMs;
00047         // Issue warning when a scheduled event is dispatched more then @c lateDispatchToleranceMs [ms]
00048         // late. Default is -1 (no warnings);
00049 //         int lateDispatchToleranceMs;
00052         bool traceScheduledEvents;
00055         bool traceDispatchedEvents;
00056     };
00057 
00059     EventScheduler( gbxsickacfr::gbxutilacfr::Tracer& tracer, const EventScheduler::Config& config=EventScheduler::Config() );
00060 
00062     void scheduleEvent( EventReceiver& receiver, const EventPtr &event, double delay );
00063 
00066     void scheduleEvent( EventReceiver& receiver, int type, double delay );
00067 
00068     // from Thread
00069     virtual void run();
00070 
00071 private:
00072     // storing absolute time of the scheduled events (so that we don't have to recompute them every time).
00073     // Allow duplicates with multimap in case 2 events happen to be scheduled for the same instant.
00074     struct EventItem
00075     {
00076         EventItem( EventReceiver& r, const EventPtr& e ) :
00077             receiver(r), event(e) {};
00078         EventReceiver& receiver;
00079         EventPtr event;
00080     };
00081     typedef std::multimap<IceUtil::Time,EventItem> TimeEventMap;
00082     TimeEventMap schedule_;
00083     IceUtil::Mutex scheduleMutex_;
00084 
00085     void dispatchEvents();
00086     
00087     gbxsickacfr::gbxutilacfr::Tracer& tracer_;
00088     Config config_;
00089 };
00091 typedef IceUtil::Handle<EventScheduler> EventSchedulerPtr;
00092 
00093 } // namespace
00094 
00095 #endif
 

Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)


Generated for Orca Robotics by  doxygen 1.4.5