Listing 8 Extract from counter_cost.cpp
/* /////////////////////////////////////////////////////////////
* ...
*
* Extract from counter_cost.cpp
*
* Copyright (C) 2002, Synesis Software Pty Ltd.
* (Licensed under the Synesis Software Standard Source License:
* http://www.synesis.com.au/licenses/ssssl.html)
*
* ...
* ////////////////////////////////////////////////////////// */
#include <stdio.h>
#define _WINSTL_NO_NAMESPACES
#include <winstl.h>
#include <winstl_tick_counter.h>
#include <winstl_multimedia_counter.h>
#include <winstl_highperformance_counter.h>
#include <winstl_systemtime_counter.h>
#include <winstl_threadtimes_counter.h>
#include <winstl_processtimes_counter.h>
#include <winstl_performance_counter.h>
#include <winstl_performance_counter_scope.h>
#include <winstl_performance_counter_init.h>
/* //////////////////////////////////////////////////////////// */
const int C_ITERATIONS = 1000000;
/* //////////////////////////////////////////////////////////// */
typedef highperformance_counter application_counter_type;
template<
ws_typename_param_k C1
, ws_typename_param_k C2
>
inline ws_typename_type_k C1::interval_type
test_cost(C1 &app_counter, C2 &counter)
{
for(int i = 0; i < 2; ++i)
{
performance_counter_scope<C1> scope(app_counter);
for(int j = 0; j < C_ITERATIONS; ++j)
{
counter.start();
counter.stop();
}
}
return app_counter.get_milliseconds();
}
int main(int /* argc */, char* /* argv */[])
{
performance_counter_init<application_counter_type> app_counter;
#if defined(_STLSOFT_COMPILER_IS_BORLAND) || \
defined(_STLSOFT_COMPILER_IS_INTEL) || \
defined(_STLSOFT_COMPILER_IS_MSVC)
#define _counter_test_fmt "%I64d"
#else
#define _counter_test_fmt "%lld"
#endif /* compiler */
#define _test_counter(_x) \
do \
{ \
_x x; \
\
printf( #_x ": " _counter_test_fmt "us\n", \
test_cost(app_counter, x)); \
} \
while(0)
_test_counter(tick_counter);
_test_counter(multimedia_counter);
_test_counter(systemtime_counter);
_test_counter(highperformance_counter);
_test_counter(threadtimes_counter);
_test_counter(processtimes_counter);
_test_counter(performance_counter);
return 0;
}