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; }