by_library/performance/processtimes_counter/processtimes_counter.cpp
[C++ only] Illustrates use of the
Performance library processtimes_counter component (
unixstl::processtimes_counter for UNIX;
winstl::processtimes_counter for Windows). This example demonstrates timing an interval comprising kernel and user activity and displaying the interval elapsed times for both kernel and user in seconds, milliseconds and microseconds.
#include <platformstl/performance/performance_counter.hpp>
#include <platformstl/performance/processtimes_counter.hpp>
#include <platformstl/synch/sleep_functions.h>
#include <exception>
#include <iostream>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
#include <stdio.h>
#include <stdlib.h>
int main()
{
platformstl::processtimes_counter usageCounter;
platformstl::performance_counter elapsedCounter;
usageCounter.start();
elapsedCounter.start();
{ for(volatile size_t i = 0; i < 0x1fffffff; ++i)
{}}
{ for(volatile size_t i = 0; i < 0x1ffff; ++i)
{
fprintf(stdout, " \b");
}}
platformstl::micro_sleep(5 * 1000 * 1000);
usageCounter.stop();
elapsedCounter.stop();
cout << "elapsed interval (s): " << static_cast<unsigned>(elapsedCounter.get_seconds()) << endl;
cout << "elapsed interval (ms): " << static_cast<unsigned>(elapsedCounter.get_milliseconds()) << endl;
cout << "elapsed interval (us): " << static_cast<unsigned>(elapsedCounter.get_microseconds()) << endl;
cout << "user interval (s): " << static_cast<unsigned>(usageCounter.get_user_seconds()) << endl;
cout << "user interval (ms): " << static_cast<unsigned>(usageCounter.get_user_milliseconds()) << endl;
cout << "user interval (us): " << static_cast<unsigned>(usageCounter.get_user_microseconds()) << endl;
cout << "kernel interval (s): " << static_cast<unsigned>(usageCounter.get_kernel_seconds()) << endl;
cout << "kernel interval (ms): " << static_cast<unsigned>(usageCounter.get_kernel_milliseconds()) << endl;
cout << "kernel interval (us): " << static_cast<unsigned>(usageCounter.get_kernel_microseconds()) << endl;
return EXIT_SUCCESS;
}