Getting an accurate execution time in C++ (micro seconds)

后端 未结 4 829
温柔的废话
温柔的废话 2020-12-13 06:37

I want to get an accurate execution time in micro seconds of my program implemented with C++. I have tried to get the execution time with clock_t but it\'s not accurate.

4条回答
  •  情话喂你
    2020-12-13 07:04

    If you're on Windows, you can use QueryPerformanceCounter

    See How to use the QueryPerformanceCounter function to time code in Visual C++

    __int64 ctr1 = 0, ctr2 = 0, freq = 0;
    int acc = 0, i = 0;
    
    // Start timing the code.
    if (QueryPerformanceCounter((LARGE_INTEGER *)&ctr1)!= 0)
    {
        // Code segment is being timed.
        for (i=0; i<100; i++) acc++;
    
        // Finish timing the code.
        QueryPerformanceCounter((LARGE_INTEGER *)&ctr2);
    
        Console::WriteLine("Start Value: {0}",ctr1.ToString());
        Console::WriteLine("End Value: {0}",ctr2.ToString());
    
        QueryPerformanceFrequency((LARGE_INTEGER *)&freq);
    
        Console::WriteLine(S"QueryPerformanceCounter minimum resolution: 1/{0} Seconds.",freq.ToString());
        // In Visual Studio 2005, this line should be changed to:     Console::WriteLine("QueryPerformanceCounter minimum resolution: 1/{0} Seconds.",freq.ToString()); 
        Console::WriteLine("100 Increment time: {0} seconds.",((ctr2 - ctr1) * 1.0 / freq).ToString());
    }
    else
    {
        DWORD dwError = GetLastError();
        Console::WriteLine(S"Error value = {0}",dwError.ToString());// In Visual Studio 2005, this line should be changed to: Console::WriteLine("Error value = {0}",dwError.ToString());
    }
    
    // Make the console window wait.
    Console::WriteLine();
    Console::Write("Press ENTER to finish.");
    Console::Read();
    
    return 0;
    

    You can put it around a call to CreateProcess(...) and WaitForSingleObject(...) for the entire process lifetime, otherwise around the main function for your code.

提交回复
热议问题