// boost cpu_timer_info.cpp ----------------------------------------------------------// // Copyright Beman Dawes 2011 // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // See http://www.boost.org/libs/timer for documentation. #include #include #include #include // for atol() #include #include using boost::timer::nanosecond_type; using boost::timer::cpu_times; using boost::timer::cpu_timer; using boost::timer::auto_cpu_timer; using std::cout; using std::endl; int cpp_main( int argc, char * argv[] ) { cout << '\n'; cout << "For cpu_times.wall, the underlying clock " << (boost::chrono::high_resolution_clock::is_steady ? "is steady. " : "is not steady. " ) << "Steady clocks are defined by C++11 as clocks for which values " "of time_point never decrease as physical time advances and for " "which values of time_point advance at a steady rate relative to " "real time. That is, the clock may not be adjusted.\n\n"; cpu_times start_time; start_time.clear(); cpu_times current_time; { cpu_timer cpu; cout << "measure boost::timer::cpu_timer resolution for user time..." << endl; for (int i = 0; i < 3; ++i) { cpu.start(); start_time = cpu.elapsed(); current_time.user = start_time.user; while (current_time.user == start_time.user) { current_time = cpu.elapsed(); } cout << current_time.user - start_time.user << "ns\n"; } } { cpu_timer cpu; cout << "measure boost::timer::cpu_timer resolution for wall-clock time..." << endl; for (int i = 0; i < 100; ++i) { cpu.start(); start_time.wall = cpu.elapsed().wall; current_time.wall = start_time.wall; while (current_time.wall == start_time.wall) { current_time.wall = cpu.elapsed().wall; } cout << current_time.wall - start_time.wall << "ns "; } } return 0; }