以毫秒为单位获取时间来分析函数持续时间

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 &lt;ctime&gt;) 对于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 年以来的当前时间戳(以毫秒为单位)

以毫秒为单位获取以毫秒为单位的午夜纪元时间

XQuery 中是不是有任何方法可以获取自某个 Epoch 以来的当前时间(以毫秒为单位)?

mongoDB 以微秒为单位获取查询的执行时间

如何在 PHP 中以毫秒为单位获取当前时间?