19 namespace jmmcg {
namespace LIBJMMCG_VER_NAMESPACE {
21 template<
typename Mdl>
22 inline typename hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::value_type
23 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::to_usec(
const time_utc_t ticks)
noexcept(
true) {
24 const value_type tmp=
static_cast<value_type>(ticks.tv_sec)*1000000+ticks.tv_nsec/1000.0;
28 template<
typename Mdl>
29 inline const typename hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::time_utc_t
30 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::get_start_time()
noexcept(
false) {
32 if (::clock_gettime(CLOCK_REALTIME, &tm)) {
33 throw exception_type(_T(
"High-performance counter not supported."), info::function(__LINE__,
__PRETTY_FUNCTION__,
typeid(&hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::get_start_time)), JMMCG_REVISION_HDR(_T(LIBJMMCG_VERSION_NUMBER)));
38 template<
typename Mdl>
39 inline typename hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::value_type
40 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::current_count()
noexcept(
false) {
41 return to_usec(get_start_time());
44 template<
typename Mdl>
45 inline const typename hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::time_utc_t
46 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::current_time()
const noexcept(
false) {
47 return get_start_time();
50 template<
typename Mdl>
52 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::hp_timer()
noexcept(
false)
53 : start_up_time(get_start_time()),
54 start_up_count(current_count()) {
59 hp_interval<T>::~hp_interval()
noexcept(
true) {
60 const typename timer_t::time_utc_t end=timer.current_time();
61 if (end.tv_nsec>=start.tv_nsec) {
62 interval.tv_nsec=end.tv_nsec-start.tv_nsec;
63 interval.tv_sec=end.tv_sec-start.tv_sec;
65 interval.tv_nsec=1000000000+(end.tv_nsec-start.tv_nsec);
66 interval.tv_sec=end.tv_sec-start.tv_sec-1;