00001
00002
00003
00004
00005
00006
00007
00008 #ifndef OPENDDS_WATCHDOG_H
00009 #define OPENDDS_WATCHDOG_H
00010
00011 #include "ace/config-all.h"
00012
00013 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00014 # pragma once
00015 #endif
00016
00017 #include "dds/DCPS/ReactorInterceptor.h"
00018
00019 #include "ace/Time_Value.h"
00020
00021 namespace OpenDDS {
00022 namespace DCPS {
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 class Watchdog : public ReactorInterceptor {
00034 protected:
00035
00036 explicit Watchdog(const ACE_Time_Value& interval);
00037
00038 virtual ~Watchdog();
00039
00040 private:
00041 int handle_timeout(const ACE_Time_Value&, const void* act)
00042 {
00043 return execute(act, true), 0;
00044 }
00045
00046
00047
00048
00049
00050 virtual void execute(const void* act, bool timer_called) = 0;
00051
00052
00053 virtual void reschedule_deadline() = 0;
00054
00055 bool reactor_is_shut_down() const;
00056
00057 public:
00058
00059
00060
00061
00062
00063
00064
00065 void reset_interval(const ACE_Time_Value& interval);
00066
00067
00068
00069 long schedule_timer(const void* act, const ACE_Time_Value& interval);
00070
00071
00072 int cancel_timer(long timer_id);
00073
00074
00075 void cancel_all();
00076
00077
00078 int reset_timer_interval(long timer_id);
00079
00080 protected:
00081
00082 ACE_Time_Value interval_;
00083 };
00084
00085 }
00086 }
00087
00088 #endif