如何在C ++中计时事件?

时间:2012-08-07 17:00:59

标签: c++

我希望能够获得在我的C ++程序中执行某些操作所需的纳秒数。

对象创建,函数执行它的时间等等。

Java中,我们会采取以下措施:

    long now = System.currentTimeMillis();
    // stuff
    long diff = (System.currentTimeMillis() - now);

你会如何在C ++中做同样的事情?

5 个答案:

答案 0 :(得分:5)

标准C ++中的<chrono>库提供了执行此操作的最佳方法。该库为时钟提供标准的,类型安全的通用API。

#include <chrono>
#include <iostream>

int main() {
    using std::chrono::duration_cast;
    using std::chrono::nanoseconds;
    typedef std::chrono::high_resolution_clock clock;

    auto start = clock::now();
    // stuff
    auto end = clock::now();
    std::cout << duration_cast<nanoseconds>(end-start).count() << "ns\n";
}

时钟的实际分辨率会因实现而异,但考虑到实现的滴答周期,此代码将始终以纳秒为单位显示结果。

答案 1 :(得分:2)

在C ++ 11中,您可以使用chrono库 -

  

类模板std :: chrono :: duration表示时间间隔。   它由Rep类型的刻度和刻度周期组成,其中刻度周期是编译时有理常数,表示从一个刻度到下一个刻度的秒数。

目前在GCC 4.5.1中实施。 (尚未在VC ++中)。请参阅Ideone.com cppreference.com上的execution time of a function call示例代码

答案 2 :(得分:1)

查看clockclock_t。对于你所说的解决方案,我认为C ++中没有本机支持。要获得有意义的值,您必须为多个调用或构造计时,或使用分析器(所需)。

答案 3 :(得分:0)

答案 4 :(得分:0)

我今天早些时候问过这个问题。我目前最好的解决方案是使用SDL,并致电:

uint32 a_time = SDL_GetTicks(); // Return uint32 count of milliseconds since SDL_Init was called

虽然这可能会给你带来很多开销,即使你只是使用定时器功能启动SDL。 (SDL_Init(SDL_INIT_TIMER)。

希望这会对你有所帮助 - 我为此解决了这个问题,因为它是可移植的。