00001
00020 #ifndef PublisherNew_h
00021 #define PublisherNew_h
00022
00023 #include <rtm/RTC.h>
00024
00025 #include <ace/Task.h>
00026 #include <ace/Synch.h>
00027 #include <rtm/PublisherBase.h>
00028
00029 namespace RTC
00030 {
00031 class InPortConsumer;
00032 class Properties;
00057 class PublisherNew
00058 : public PublisherBase,
00059 public ACE_Task<ACE_MT_SYNCH>
00060 {
00061 public:
00083 PublisherNew(InPortConsumer* consumer,
00084 const Properties& property);
00085
00099 virtual ~PublisherNew();
00100
00118 virtual void update();
00119
00139 virtual int svc(void);
00140
00164 virtual int open(void *args);
00165
00185 virtual void release();
00186
00187 protected:
00188
00189 private:
00190 InPortConsumer* m_consumer;
00191 bool m_running;
00192 unsigned long m_usec;
00193
00194
00195 struct NewData
00196 {
00197 NewData() : _cond(_mutex), _updated(false) {};
00198 ACE_Thread_Mutex _mutex;
00199 ACE_Condition<ACE_Thread_Mutex> _cond;
00200 bool _updated;
00201 };
00202
00203
00204 NewData m_data;
00205 };
00206 };
00207 #endif // PublisherNew_h
00208