Merge pull request #4949

5464725a protocol: change standby mode to not wait sleeping (moneromooo-monero)
85807dfb add a once_a_time_milliseconds class (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2019-01-06 20:37:51 +02:00
commit 13b006137c
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD
3 changed files with 54 additions and 21 deletions

View file

@ -230,35 +230,56 @@ namespace math_helper
}
}
template<int default_interval, bool start_immediate = true>
class once_a_time_seconds
template<uint64_t scale, int default_interval, bool start_immediate = true>
class once_a_time
{
uint64_t get_time() const
{
#ifdef _WIN32
FILETIME fileTime;
GetSystemTimeAsFileTime(&fileTime);
unsigned __int64 present = 0;
present |= fileTime.dwHighDateTime;
present = present << 32;
present |= fileTime.dwLowDateTime;
present /= 10; // mic-sec
#else
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000000 + tv.tv_usec;
#endif
}
public:
once_a_time_seconds():m_interval(default_interval)
once_a_time():m_interval(default_interval * scale)
{
m_last_worked_time = 0;
if(!start_immediate)
time(&m_last_worked_time);
m_last_worked_time = get_time();
}
template<class functor_t>
bool do_call(functor_t functr)
{
time_t current_time = 0;
time(&current_time);
uint64_t current_time = get_time();
if(current_time - m_last_worked_time > m_interval)
{
bool res = functr();
time(&m_last_worked_time);
m_last_worked_time = get_time();
return res;
}
return true;
}
private:
time_t m_last_worked_time;
time_t m_interval;
uint64_t m_last_worked_time;
uint64_t m_interval;
};
template<int default_interval, bool start_immediate = true>
class once_a_time_seconds: public once_a_time<1000000, default_interval, start_immediate> {};
template<int default_interval, bool start_immediate = true>
class once_a_time_milliseconds: public once_a_time<1000, default_interval, start_immediate> {};
}
}