diff --git a/common/rfb/Timer.h b/common/rfb/Timer.h index ef50972..ddfce1b 100644 --- a/common/rfb/Timer.h +++ b/common/rfb/Timer.h @@ -35,6 +35,8 @@ namespace rfb { dispatch elapsed Timer callbacks and to determine how long to wait in select() for the next timeout to occur. + For classes that can be derived it's best to use MethodTimer which can call a specific + method on the class, thus avoiding conflicts when subclassing. */ struct Timer { @@ -101,6 +103,19 @@ namespace rfb { static std::list pending; }; + template class MethodTimer + : public Timer, public Timer::Callback { + public: + MethodTimer(T* obj_, bool (T::*cb_)(Timer*)) + : Timer(this), obj(obj_), cb(cb_) {} + + virtual bool handleTimeout(Timer* t) { return (obj->*cb)(t); } + + private: + T* obj; + bool (T::*cb)(Timer*); + }; + }; #endif