28 using api_threading_traits=
ppd::api_threading_traits<
ppd::platform_api,
ppd::heavyweight_threading>;
31 : old_priority(api_threading_traits::get_kernel_priority(api_threading_traits::get_current_thread())) {
32 api_threading_traits::set_kernel_priority(api_threading_traits::get_current_thread(), api_threading_traits::api_params_type::priority_type::time_critical);
37 api_threading_traits::set_kernel_priority(api_threading_traits::get_current_thread(), old_priority);
43 api_threading_traits::api_params_type::priority_type
const old_priority;
54 const constexpr unsigned num_reps=10u;
55 using samples_t=
std ::array<
double, num_reps>;
57 const auto ticks_per_microsec=[]() {
59 const auto start_microsec=
std::chrono::high_resolution_clock::now();
62 std::this_thread::sleep_for(std::chrono::milliseconds(1));
64 const auto end_microsec=
std::chrono::high_resolution_clock::now();
65 assert(end_microsec>start_microsec);
66 const std::chrono::duration<
double,
std::micro> microsec_dur=end_microsec-start_microsec;
67 return e/microsec_dur.count();
70 double min{
std::numeric_limits<
double>::max()};
72 double max{
std::numeric_limits<
double>::min()};
73 for (
unsigned i=0; i<num_reps; ++i) {
74 samples[i]=ticks_per_microsec();
75 min=std::min(min, samples[i]);
81 max=std::max(max, samples[i]);
84 const double mean_average_dev=std::accumulate(
88 [&mean](
auto const acc,
auto const sample) {
89 return acc+std::abs(sample-mean);