Click here to Skip to main content
13,252,259 members (63,675 online)
Click here to Skip to main content
Add your own
alternative version


51 bookmarked
Posted 11 Apr 2000

The CPerfTimer timer class

, 27 Apr 2000
Rate this:
Please Sign up or sign in to vote.
This class encapsulates QueryPerformanceCounter for high precision timing
  • Download source files - 3 Kb
  • Updated: the class is now thread safe.

    High resolution timing is supported in Win32 by the QueryPerformanceCounter and QueryPerformanceFrequency API calls. The timer resolution varies with the processor. Today's high speed processors have a timer resolution of less than a microsecond. Of course, this is a much better resolution than the GetTickCount API!

    Using the QueryPerformanceCounter calls directly takes too much typing and the resulting code is usually hard to read. So, I looked all over the net for a timer class but I could not find one that suited me. I wrote a simple and powerful timer class and named it CPerfTimer. I wrote this a long time ago but I still have not had the need to update it. Searching the net I could not find a timer class as simple to use and as useful as CPerfTimer. Several other timer classes are available and they vary as to their simplicity and usefulness. I do not claim that this is the end-all-be-all of timer classes; but, I hope that someone will find it useful enough to refrain from taking the time to write yet another timer class.

    This class is simple to use. Just declare a variable as type CPerfTimer, call Start() to start timing and call Stop() to stop timing. You can pause a timer by calling Stop() and then you can call Start() to resume. Retrieve the elapsed time by calling an Elapsed...() function. Assignment, addition, subtraction and comparison are supported. There are a few information calls available also. All calls except Start and Stop can be performed on a timer without stopping it.

    I have not included separate documentation or example application. The code is fairly well documented and the above paragraph was copied from the CPerfTimer.h file. Methods for adding, subtracting and comparing CPerfTimers and seconds (double) are also included. And, a CPerfTimerT class that should be thread safe (no extensive testing has been done). Please inform me if any bugs are found or you have an idea for an enhancement.


    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    About the Author

    Dean Wyant
    Web Developer
    United States United States
    No Biography provided

    You may also be interested in...

    Comments and Discussions

    GeneralQueryPerformanceCounter fails sometimes, when structmember alignment is set to 1 byte Pin
    hund1200020-Nov-08 5:42
    memberhund1200020-Nov-08 5:42 
    GeneralRe: QueryPerformanceCounter fails sometimes, when structmember alignment is set to 1 byte Pin
    Dean Wyant20-Nov-08 6:39
    memberDean Wyant20-Nov-08 6:39 
    QuestionApplication Error When Calling Start(TRUE) Pin
    shizulooi31-Oct-07 0:08
    membershizulooi31-Oct-07 0:08 
    AnswerRe: Application Error When Calling Start(TRUE) Pin
    Dean Wyant31-Oct-07 4:04
    memberDean Wyant31-Oct-07 4:04 
    Questionproblem compiling CPerfTimer on VC++ Express Pin
    abarund27-Aug-06 14:08
    memberabarund27-Aug-06 14:08 
    AnswerRe: problem compiling CPerfTimer on VC++ Express Pin
    Dean Wyant28-Aug-06 5:30
    memberDean Wyant28-Aug-06 5:30 
    AnswerRe: problem compiling CPerfTimer on VC++ Express Pin
    CoderBruce15-Jul-10 9:01
    memberCoderBruce15-Jul-10 9:01 
    GeneralPossible bug Pin
    metimmee7-May-06 13:39
    membermetimmee7-May-06 13:39 
    GeneralRe: Possible bug Pin
    Dean Wyant12-May-06 6:08
    memberDean Wyant12-May-06 6:08 
    GeneralLaptop Pin
    zvivered30-Mar-05 8:11
    memberzvivered30-Mar-05 8:11 
    GeneralRe: Laptop Pin
    Dean Wyant30-Mar-05 13:21
    memberDean Wyant30-Mar-05 13:21 
    GeneralWindows CE Pin
    Grimoire2-Nov-04 13:31
    memberGrimoire2-Nov-04 13:31 
    GeneralExcellent Pin
    thought20-Jan-04 2:48
    memberthought20-Jan-04 2:48 
    GeneralNice class. This saved me a lot of time. Pin
    varnk19-Sep-03 11:06
    membervarnk19-Sep-03 11:06 
    GeneralRe: Nice class. This saved me a lot of time. Pin
    Dean Wyant31-Oct-07 4:13
    memberDean Wyant31-Oct-07 4:13 
    QuestionWhy not use critical sections? Pin
    Brian van der Beek24-Jun-03 6:27
    memberBrian van der Beek24-Jun-03 6:27 
    AnswerRe: Why not use critical sections? Pin
    Dean Wyant25-Jun-03 18:04
    memberDean Wyant25-Jun-03 18:04 
    QuestionCPerfTimer under VC++? Pin
    DarkGuardian5-Jun-03 4:04
    memberDarkGuardian5-Jun-03 4:04 
    AnswerRe: CPerfTimer under VC++? Pin
    Dean Wyant5-Jun-03 5:11
    memberDean Wyant5-Jun-03 5:11 
    GeneralRe: CPerfTimer under VC++? Pin
    DarkGuardian5-Jun-03 20:24
    memberDarkGuardian5-Jun-03 20:24 
    GeneralRe: CPerfTimer under VC++? Pin
    DarkGuardian5-Jun-03 20:37
    memberDarkGuardian5-Jun-03 20:37 
    GeneralRe: CPerfTimer under VC++? Pin
    bitkidoku26-Sep-06 16:05
    memberbitkidoku26-Sep-06 16:05 
    Generalmissing stdafx.h Pin
    steven76512-May-03 12:52
    membersteven76512-May-03 12:52 
    GeneralRe: missing stdafx.h Pin
    Dean Wyant13-May-03 15:23
    memberDean Wyant13-May-03 15:23 
    Generalmissing stdafx.h Pin
    steven76512-May-03 12:52
    membersteven76512-May-03 12:52 
    GeneralOn multiprocessor machine Pin
    warmcold4-May-03 13:33
    memberwarmcold4-May-03 13:33 
    QuestionCPerfTimerT class ? Pin
    Anonymous27-Dec-02 2:02
    sussAnonymous27-Dec-02 2:02 
    AnswerRe: CPerfTimerT class ? Pin
    Dean Wyant28-Dec-02 3:40
    memberDean Wyant28-Dec-02 3:40 
    QuestionJava timer? Pin
    sharonr117-Dec-02 4:21
    susssharonr117-Dec-02 4:21 
    QuestionLicense ? Pin
    George13-Nov-02 21:30
    memberGeorge13-Nov-02 21:30 
    AnswerRe: License ? Pin
    Dean Wyant16-Nov-02 5:48
    memberDean Wyant16-Nov-02 5:48 
    GeneralRe: License ? Pin
    George16-Nov-02 6:51
    memberGeorge16-Nov-02 6:51 
    GeneralPerformance Issue Pin
    AllanK6-Jan-03 9:19
    memberAllanK6-Jan-03 9:19 
    GeneralRe: Performance Issue Pin
    Dean Wyant9-Jan-03 14:50
    memberDean Wyant9-Jan-03 14:50 
    QuestionIs it a Timer or a TimeCounter? Pin
    miliu15-Sep-02 18:35
    sussmiliu15-Sep-02 18:35 
    AnswerRe: Is it a Timer or a TimeCounter? Pin
    Dean Wyant19-Sep-02 10:14
    memberDean Wyant19-Sep-02 10:14 
    GeneralLack of stdafx.h file. Pin
    Kisa13-Aug-02 6:37
    memberKisa13-Aug-02 6:37 
    GeneralRe: Lack of stdafx.h file. Pin
    Kisa14-Aug-02 1:33
    memberKisa14-Aug-02 1:33 
    GeneralRe: Lack of stdafx.h file. Pin
    Dean Wyant16-Aug-02 5:25
    memberDean Wyant16-Aug-02 5:25 
    GeneralRe: Lack of stdafx.h file. Pin
    priyanair5-Apr-04 14:41
    memberpriyanair5-Apr-04 14:41 
    GeneralRe: Lack of stdafx.h file. Pin
    Dean Wyant7-Apr-04 15:40
    memberDean Wyant7-Apr-04 15:40 
    QuestionError Message ?? Pin
    Anonymous18-Mar-02 8:58
    memberAnonymous18-Mar-02 8:58 
    AnswerRe: Error Message ?? Pin
    Dean Wyant21-Mar-02 5:34
    memberDean Wyant21-Mar-02 5:34 
    Generalexample please Pin
    Ramy8-Dec-01 21:05
    memberRamy8-Dec-01 21:05 
    GeneralRe: example please Pin
    Dean Wyant9-Dec-01 10:38
    memberDean Wyant9-Dec-01 10:38 
    An example would be different according to whether you use MFC or not. Also, what kind of progam (dialog, console, etc.) would dictate how tp show output.

    Using MFC:

    Add CPerfTimer to your project.

    #include "PerfTimer.h"

    CString S;
    CPerfTimer T;

    //.... do something
    // Timer is still running, to stop it use T.Stop();
    // Show S according to the type of program

    Using system library:

    #include "PerfTimer.h"

    char S[20];
    CPerfTimer T;

    //.... do something
    // Timer is still running, to stop it use T.Stop();
    // Show S according to the type of program.

    Note that the time will seem unstable or inaccurate if running
    in debug mode. It is not wrong, the debugger overhead can cause iconsistencies. Also remember that multitasking operating systems
    may cause other threads to run in the middle of a timimg operation which can cause times to be inconsistent. However, all times the CPerfTimer class reports are the correct real time (within the resolution and accounting for overhead (about +-0.2us). Also, CPerfTimer is not meant for timimg long operations because the QueryPerformanceFrequency call is not accurate enough to maintain resolution over many hours or days.

    GeneralRe: example please Pin
    Ramy10-Dec-01 17:06
    memberRamy10-Dec-01 17:06 
    GeneralTimer runs to quick Pin
    Rob Ottenhoff5-Mar-01 1:01
    memberRob Ottenhoff5-Mar-01 1:01 
    GeneralRe: Timer runs to quick Pin
    Anonymous5-Mar-01 7:04
    memberAnonymous5-Mar-01 7:04 
    GeneralUsage Notes Pin
    Dean27-Jan-01 12:15
    memberDean27-Jan-01 12:15 
    GeneralVery useful... Pin
    kabir5-Sep-00 1:37
    susskabir5-Sep-00 1:37 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    Permalink | Advertise | Privacy | Terms of Use | Mobile
    Web04 | 2.8.171114.1 | Last Updated 28 Apr 2000
    Article Copyright 2000 by Dean Wyant
    Everything else Copyright © CodeProject, 1999-2017
    Layout: fixed | fluid