This source file includes following definitions.
- to_usec
- get_start_time
- current_count
- current_time
- start_up_count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 namespace jmmcg {
22
23 template<typename Mdl>
24 inline typename hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::value_type
25 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::to_usec(const time_utc_t ticks) noexcept(true) {
26 const value_type tmp=static_cast<value_type>(ticks.tv_sec)*1000000+ticks.tv_nsec/1000.0;
27 return tmp;
28 }
29
30 template<typename Mdl>
31 inline const typename hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::time_utc_t
32 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::get_start_time() noexcept(false) {
33 time_utc_t tm;
34 if (::clock_gettime(CLOCK_REALTIME, &tm)) {
35 throw exception_type(_T("High-performance counter not supported."), jmmcg::info::function(__LINE__,__PRETTY_FUNCTION__,typeid(&hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::get_start_time)), JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/unix/hp_timer_impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
36 }
37 return tm;
38 }
39
40 template<typename Mdl>
41 inline typename hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::value_type
42 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::current_count() noexcept(false) {
43 return to_usec(get_start_time());
44 }
45
46 template<typename Mdl>
47 inline const typename hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::time_utc_t
48 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::current_time() const noexcept(false) {
49 return get_start_time();
50 }
51
52 template<typename Mdl>
53 inline
54 hp_timer<ppd::generic_traits::api_type::posix_pthreads, Mdl>::hp_timer() noexcept(false)
55 : start_up_time(get_start_time()),
56 start_up_count(current_count()) {
57 }
58
59 template <typename T>
60 inline
61 hp_interval<T>::~hp_interval() noexcept(true) {
62 const typename timer_t::time_utc_t end=timer.current_time();
63 if (end.tv_nsec>=start.tv_nsec) {
64 interval.tv_nsec=end.tv_nsec-start.tv_nsec;
65 interval.tv_sec=end.tv_sec-start.tv_sec;
66 } else {
67 interval.tv_nsec=1000000000+(end.tv_nsec-start.tv_nsec);
68 interval.tv_sec=end.tv_sec-start.tv_sec-1;
69 }
70 }
71
72 }