X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2Fio%2Fasync%2FHHWheelTimer.h;h=0424ac59793b769fa95006a5b5e00c4265c4cfb3;hp=56ded208aaf6e61633856da5768032c0192a5ede;hb=81bb353a7a807bc48cb06e50a9db84613df0cbce;hpb=6a36073a00ac3a1fd23be79ad720a963f86bf9e3 diff --git a/folly/io/async/HHWheelTimer.h b/folly/io/async/HHWheelTimer.h index 56ded208..0424ac59 100644 --- a/folly/io/async/HHWheelTimer.h +++ b/folly/io/async/HHWheelTimer.h @@ -148,14 +148,22 @@ class HHWheelTimer : private folly::AsyncTimeout, }; /** - * Create a new HHWheelTimer with the specified interval. + * Create a new HHWheelTimer with the specified interval and the + * default timeout value set. + * + * Objects created using this version of constructor can be used + * to schedule both variable interval timeouts using + * scheduleTimeout(callback, timeout) method, and default + * interval timeouts using scheduleTimeout(callback) method. */ static int DEFAULT_TICK_INTERVAL; explicit HHWheelTimer(folly::EventBase* eventBase, std::chrono::milliseconds intervalMS = std::chrono::milliseconds(DEFAULT_TICK_INTERVAL), AsyncTimeout::InternalEnum internal = - AsyncTimeout::InternalEnum::NORMAL); + AsyncTimeout::InternalEnum::NORMAL, + std::chrono::milliseconds defaultTimeoutMS = + std::chrono::milliseconds(-1)); /** * Destroy the HHWheelTimer. @@ -182,6 +190,15 @@ class HHWheelTimer : private folly::AsyncTimeout, return interval_; } + /** + * Get the default timeout interval for this HHWheelTimer. + * + * Returns the timeout interval in milliseconds. + */ + std::chrono::milliseconds getDefaultTimeout() const { + return defaultTimeout_; + } + /** * Schedule the specified Callback to be invoked after the * specified timeout interval. @@ -194,6 +211,18 @@ class HHWheelTimer : private folly::AsyncTimeout, void scheduleTimeoutImpl(Callback* callback, std::chrono::milliseconds timeout); + /** + * Schedule the specified Callback to be invoked after the + * fefault timeout interval. + * + * If the callback is already scheduled, this cancels the existing timeout + * before scheduling the new timeout. + * + * This method uses CHECK() to make sure that the default timeout was + * specified on the object initialization. + */ + void scheduleTimeout(Callback* callback); + template void scheduleTimeoutFn(F fn, std::chrono::milliseconds timeout) { struct Wrapper : Callback { @@ -262,6 +291,7 @@ class HHWheelTimer : private folly::AsyncTimeout, virtual void timeoutExpired() noexcept; std::chrono::milliseconds interval_; + std::chrono::milliseconds defaultTimeout_; static constexpr int WHEEL_BUCKETS = 4; static constexpr int WHEEL_BITS = 8;