00001 // -*- C++ -*- 00018 #ifndef OPENRTM_RTPREEMPTEC_H 00019 #define OPENRTM_RTPREEMPTEC_H 00020 00021 #include <rtm/RTC.h> 00022 #include <rtm/Manager.h> 00023 #include <rtm/PeriodicExecutionContext.h> 00024 00025 namespace OpenRTM 00026 { 00126 class RTPreemptEC 00127 : public virtual ::RTC::PeriodicExecutionContext 00128 { 00129 public: 00143 RTPreemptEC(); 00144 00158 virtual ~RTPreemptEC(); 00159 00179 virtual int svc(void); 00180 00200 template <class T> 00201 void getProperty(coil::Properties& prop, const char* key, T& value) 00202 { 00203 if (prop.findNode(key) != 0) 00204 { 00205 T tmp; 00206 if (coil::stringTo(tmp, prop[key].c_str())) 00207 { 00208 value = tmp; 00209 } 00210 } 00211 } 00212 00213 private: 00214 int m_priority; 00215 int m_policy; 00216 int m_waitoffset; 00217 }; 00218 }; 00219 00220 extern "C" 00221 { 00229 void DLL_EXPORT RTPreemptECInit(RTC::Manager* manager); 00230 }; 00231 00232 #endif // OPENRTM_RTPREEMPTEC_H 00233