以毫秒为单位获取时间来分析函数持续时间
Posted
技术标签:
【中文标题】以毫秒为单位获取时间来分析函数持续时间【英文标题】:Get time in milliseconds to profile a function duration 【发布时间】:2013-08-03 08:15:41 【问题描述】:我有一个写入文件的函数。我需要使用两个参数来分析函数,所以我可以看到差异。 (不要告诉我有关 Visual Studios Profiling 工具的事情,我想自己做)。我想申请这样的东西:
double start = getTime();
myFunction("param1");
double request = getTime() - start;
printf_s("Request time: %f", request);
我该怎么做? (上面的只是伪代码,我不知道真正的函数名称)
【问题讨论】:
Look no further than the standard library。主页上的示例实际上完全符合您的要求。 更具体的库示例。 en.cppreference.com/w/cpp/chrono/time_point 这个问题问了很多次了,问之前有没有搜索过? 【参考方案1】:使用std::chrono
,这是一个适用于您的代码的示例:
#include <chrono>
int main()
using milli = std::chrono::milliseconds;
auto start = std::chrono::high_resolution_clock::now();
myFunction("param1");
auto finish = std::chrono::high_resolution_clock::now();
std::cout << "myFunction() took "
<< std::chrono::duration_cast<milli>(finish - start).count()
<< " milliseconds\n";
【讨论】:
【参考方案2】:你可以使用:
-
一个std::clock变量并除以
CLOCKS_PER_SEC
以获得秒数(需要#include <ctime>
)
对于WinAPI
,您可以使用GetTickCount() 并将其除以1000 以获得秒数。
【讨论】:
【参考方案3】:虽然已经很晚了,但我会回答这个问题: 可以使用 c++ 的 getTickCount() 函数。 基本语法有点像:
double start=(double)getTickCount();
//Your code
.
.
.
start= ((double)getTickCount() - start)/getTickFrequency();
cout<<"time spent in executing the code ="<<start;
【讨论】:
值得注意的是,这仅适用于 Windows。对于 Linux,您需要使用其他东西。【参考方案4】:您可以使用 Windows API 函数:
查询性能计数器
查询性能频率
见
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644904(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms644905(v=vs.85).aspx
【讨论】:
【参考方案5】:C++11 提供了std::chrono
命名空间,它有一组标准的时间-日期函数和类型。请注意,该参考页面的示例完全符合您的要求。
我向您推荐this Bo Quian's youtube tutorial 关于std::chrono
。
【讨论】:
以上是关于以毫秒为单位获取时间来分析函数持续时间的主要内容,如果未能解决你的问题,请参考以下文章
如何像 Java 一样获取自 1970 年以来的当前时间戳(以毫秒为单位)