00001
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef PublisherNew_h
00036 #define PublisherNew_h
00037
00038 #include <rtm/RTC.h>
00039
00040 #include <ace/Task.h>
00041 #include <ace/Synch.h>
00042 #include <rtm/PublisherBase.h>
00043
00044 namespace RTC
00045 {
00046 class InPortConsumer;
00047 class Properties;
00057 class PublisherNew
00058 : public PublisherBase,
00059 public ACE_Task<ACE_MT_SYNCH>
00060 {
00061 public:
00069 PublisherNew(InPortConsumer* consumer,
00070 const Properties& property);
00071
00079 virtual ~PublisherNew();
00080
00088 virtual void update();
00089
00103 virtual int svc(void);
00104
00118 virtual int open(void *args);
00119
00133 virtual void release();
00134
00135 protected:
00136
00137 private:
00138 InPortConsumer* m_consumer;
00139 bool m_running;
00140 unsigned long m_usec;
00141
00142
00143 struct NewData
00144 {
00145 NewData() : _cond(_mutex), _updated(false) {};
00146 ACE_Thread_Mutex _mutex;
00147 ACE_Condition<ACE_Thread_Mutex> _cond;
00148 bool _updated;
00149
00150 };
00151
00152
00153 NewData m_data;
00154 };
00155
00156 };
00157 #endif // PublisherNew_h
00158