diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-10-17 12:13:17 +0000 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-11-01 20:57:24 +0000 |
commit | dcff02e4c3b1214143b19685361c3c6cffa62be7 (patch) | |
tree | 0af241489f71a78fc75c9c6a8ae28a971a9a3f04 | |
parent | wallet: reuse cached height when set after refresh (diff) | |
download | monero-dcff02e4c3b1214143b19685361c3c6cffa62be7.tar.xz |
epee: allow a random component in once_a_time timeouts
-rw-r--r-- | contrib/epee/include/math_helper.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/contrib/epee/include/math_helper.h b/contrib/epee/include/math_helper.h index 604a04680..29acffaea 100644 --- a/contrib/epee/include/math_helper.h +++ b/contrib/epee/include/math_helper.h @@ -32,6 +32,7 @@ #include <list> #include <numeric> +#include <random> #include <boost/timer/timer.hpp> #include <boost/uuid/uuid.hpp> #include <boost/uuid/random_generator.hpp> @@ -230,7 +231,7 @@ namespace math_helper } } - template<uint64_t scale, int default_interval, bool start_immediate = true> + template<typename get_interval, bool start_immediate = true> class once_a_time { uint64_t get_time() const @@ -251,12 +252,18 @@ namespace math_helper #endif } + void set_next_interval() + { + m_interval = get_interval()(); + } + public: - once_a_time():m_interval(default_interval * scale) + once_a_time() { m_last_worked_time = 0; if(!start_immediate) m_last_worked_time = get_time(); + set_next_interval(); } void trigger() @@ -273,6 +280,7 @@ namespace math_helper { bool res = functr(); m_last_worked_time = get_time(); + set_next_interval(); return res; } return true; @@ -283,9 +291,13 @@ namespace math_helper uint64_t m_interval; }; + template<uint64_t N> struct get_constant_interval { public: uint64_t operator()() const { return N; } }; + template<int default_interval, bool start_immediate = true> - class once_a_time_seconds: public once_a_time<1000000, default_interval, start_immediate> {}; + class once_a_time_seconds: public once_a_time<get_constant_interval<default_interval * (uint64_t)1000000>, start_immediate> {}; template<int default_interval, bool start_immediate = true> - class once_a_time_milliseconds: public once_a_time<1000, default_interval, start_immediate> {}; + class once_a_time_milliseconds: public once_a_time<get_constant_interval<default_interval * (uint64_t)1000>, start_immediate> {}; + template<typename get_interval, bool start_immediate = true> + class once_a_time_seconds_range: public once_a_time<get_interval, start_immediate> {}; } } |