实际上我正在尝试计算函数在我的程序中完成所需的时间。 因此,我在调用函数时使用逻辑来获取系统时间,并在函数返回值时使用时间,然后通过减去值来获取完成所需的时间。 因此,如果有人能告诉我一些更好的方法,或者只是如何在一个实例中获得系统时间,那将是非常有帮助的
答案 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(¤tTime);
int startTime = currentTime;
/* Your program starts from here */
time(¤tTime);
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;