epee: allow a random component in once_a_time timeouts
This commit is contained in:
parent
e108330248
commit
dcff02e4c3
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
#include <random>
|
||||||
#include <boost/timer/timer.hpp>
|
#include <boost/timer/timer.hpp>
|
||||||
#include <boost/uuid/uuid.hpp>
|
#include <boost/uuid/uuid.hpp>
|
||||||
#include <boost/uuid/random_generator.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
|
class once_a_time
|
||||||
{
|
{
|
||||||
uint64_t get_time() const
|
uint64_t get_time() const
|
||||||
|
@ -251,12 +252,18 @@ namespace math_helper
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_next_interval()
|
||||||
|
{
|
||||||
|
m_interval = get_interval()();
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
once_a_time():m_interval(default_interval * scale)
|
once_a_time()
|
||||||
{
|
{
|
||||||
m_last_worked_time = 0;
|
m_last_worked_time = 0;
|
||||||
if(!start_immediate)
|
if(!start_immediate)
|
||||||
m_last_worked_time = get_time();
|
m_last_worked_time = get_time();
|
||||||
|
set_next_interval();
|
||||||
}
|
}
|
||||||
|
|
||||||
void trigger()
|
void trigger()
|
||||||
|
@ -273,6 +280,7 @@ namespace math_helper
|
||||||
{
|
{
|
||||||
bool res = functr();
|
bool res = functr();
|
||||||
m_last_worked_time = get_time();
|
m_last_worked_time = get_time();
|
||||||
|
set_next_interval();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -283,9 +291,13 @@ namespace math_helper
|
||||||
uint64_t m_interval;
|
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>
|
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>
|
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> {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue