Skip to content

Commit

Permalink
add a once_a_time_milliseconds class
Browse files Browse the repository at this point in the history
  • Loading branch information
moneromooo-monero committed Dec 7, 2018
1 parent e282e9f commit 85807df
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions contrib/epee/include/math_helper.h
Expand Up @@ -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> {};
}
}

0 comments on commit 85807df

Please sign in to comment.