如何在C ++中获得系统时间?

时间:2009-03-01 05:42:44

标签: c++

实际上我正在尝试计算函数在我的程序中完成所需的时间。 因此,我在调用函数时使用逻辑来获取系统时间,并在函数返回值时使用时间,然后通过减去值来获取完成所需的时间。 因此,如果有人能告诉我一些更好的方法,或者只是如何在一个实例中获得系统时间,那将是非常有帮助的

6 个答案:

答案 0 :(得分:5)

我为代码计时时使用的方法是time()函数。它会向您返回一个表示epoch 的数值,这使得减法部分更容易计算。

相关代码:

#include <time.h>
#include <iostream>

int main (int argc, char *argv[]) {

int startTime, endTime, totalTime;

startTime = time(NULL);

/* relevant code to benchmark in here */

endTime = time(NULL);

totalTime = endTime - startTime;

std::cout << "Runtime: " << totalTime << " seconds.";

return 0;
}

请记住这是用户时间。对于CPU,时间请看Ben的回复。

答案 1 :(得分:3)

您的问题完全取决于您使用的WHICH系统。每个系统都有自己的功能来获取当前时间。要了解系统运行了多长时间,您需要访问“高分辨率性能计数器”之一。如果您不使用性能计数器,则通常限制在微秒精度(或更差),这在分析函数速度时几乎无用。

在Windows中,您可以通过“QueryPerformanceCounter()”函数访问计数器。这将返回每个处理器上不同的任意数字。要查明计数器中的滴答数== 1秒,请调用'QueryPerformanceFrequency()'。

如果您使用Windows以外的平台进行编码,只需谷歌性能计数器和您编码的系统,它应该告诉您如何访问计数器。

编辑(澄清)
这是c ++,只包括windows.h并导入“Kernel32.lib”(似乎已删除了我的超链接,请查看文档:{​​{3}})。对于C#,您可以使用“System.Diagnostics.PerformanceCounter”类。

答案 2 :(得分:1)

您可以使用time_t

答案 3 :(得分:0)

在Linux下,尝试gettimeofday()获取微秒分辨率,或clock_gettime()获得纳秒分辨率。

(当然实际的时钟可能有更粗略的分辨率。)

答案 4 :(得分:0)

在某些系统中,您无权访问time.h标头。因此,您可以使用以下代码段来了解程序运行所需的时间,精确度为秒。

void function()
{
time_t currentTime;
time(&currentTime);
int startTime = currentTime;

   /* Your program starts from here */


  time(&currentTime);
  int timeElapsed = currentTime - startTime;

  cout<<"It took "<<timeElapsed<<" seconds to run the program"<<endl;



}

答案 5 :(得分:0)

您可以使用此处描述的带有 std::chrono 的解决方案:Getting an accurate execution time in C++ (micro seconds) 您将获得更好的测量准确度。通常我们以毫秒(ms)甚至微秒(us)为单位来衡量代码执行情况。

#include <chrono>
#include <iostream>
        
...
[YOUR METHOD/FUNCTION STARTING HERE]
        
auto start = std::chrono::high_resolution_clock::now();
    
[YOUR TEST CODE HERE]
        
auto elapsed = std::chrono::high_resolution_clock::now() - start;
        
long long microseconds = std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count();
    
std::cout << "Elapsed time: " << microseconds << " ms;
相关问题