00001
00019 #ifndef ExtTrigExecutionContext_h
00020 #define ExtTrigExecutionContext_h
00021
00022 #include <rtm/RTC.h>
00023
00024 #include <ace/Task.h>
00025 #include <ace/Synch.h>
00026
00027 #include <rtm/Manager.h>
00028 #include <rtm/PeriodicExecutionContext.h>
00029
00030 namespace RTC
00031 {
00054 class ExtTrigExecutionContext
00055 : public virtual PeriodicExecutionContext
00056 {
00057 public:
00071 ExtTrigExecutionContext();
00072
00086 virtual ~ExtTrigExecutionContext();
00087
00101 virtual void tick()
00102 throw (CORBA::SystemException);
00103
00124 virtual int svc(void);
00125
00126 private:
00127 struct Worker
00128 {
00129 Worker() : _cond(_mutex), _called(false) {};
00130 ACE_Thread_Mutex _mutex;
00131 ACE_Condition<ACE_Thread_Mutex> _cond;
00132 bool _called;
00133 };
00134
00135 Worker m_worker;
00136 };
00137 };
00138
00139 extern "C"
00140 {
00156 void ExtTrigExecutionContextInit(RTC::Manager* manager);
00157 };
00158
00159 #endif // ExtTrigExecutionContext_h