OpenRTM  1.0.0
PeriodicTask.h
説明を見る。
1 // -*- C++ -*-
20 #ifndef COIL_PERIODICTASK_H
21 #define COIL_PERIODICTASK_H
22 
23 #include <map>
24 #include <string>
25 #include <vector>
26 #include <algorithm>
27 
28 #include <coil/Mutex.h>
29 #include <coil/Guard.h>
30 #include <coil/Condition.h>
31 #include <coil/TimeValue.h>
32 #include <coil/TimeMeasure.h>
33 #include <coil/PeriodicTaskBase.h>
34 
35 namespace coil
36 {
62  : public coil::PeriodicTaskBase
63  {
64  public:
66 
82  PeriodicTask();
83 
99  virtual ~PeriodicTask();
100 
123  virtual void activate();
124 
138  virtual void finalize();
139 
153  virtual int suspend(void);
154 
168  virtual int resume(void);
169 
183  virtual void signal();
184 
198  virtual bool setTask(TaskFuncBase* func, bool delete_in_dtor = true);
199 
217  template <class O, class F>
218  bool setTask(O* obj, F fun)
219  {
220  return this->setTask(new TaskFunc<O, F>(obj, fun));
221  }
222 
236  virtual void setPeriod(double period);
237 
251  virtual void setPeriod(TimeValue& period);
252 
260  virtual void executionMeasure(bool value);
261 
269  virtual void executionMeasureCount(int n);
270 
278  virtual void periodicMeasure(bool value);
279 
287  virtual void periodicMeasureCount(int n);
288 
297 
306 
307  protected:
315  virtual int svc();
316 
324  virtual void sleep();
325 
333  virtual void updateExecStat();
334 
342  virtual void updatePeriodStat();
343 
344  protected:
353 
361  bool m_nowait;
362 
371 
380 
390  class alive_t
391  {
392  public:
393  alive_t(bool val) : value(val) {}
394  bool value;
396  };
397 
406 
414  struct suspend_t
415  {
416  suspend_t(bool sus) : suspend(sus), mutex(), cond(mutex) {}
417  bool suspend;
420  };
421 
430 
439  {
442  };
443 
452 
460  unsigned int m_execCount;
461 
469  unsigned int m_execCountMax;
470 
479 
488 
497 
505  unsigned int m_periodCount;
506 
514  unsigned int m_periodCountMax;
515 
524 
533 
534  };
535 
536 }; // namespace coil
537 
538 #endif // COIL_PERIODICTASK_H