4

我希望能够获得在我的 C++ 程序中做某事所需的纳秒数。

对象创建,函数完成它的时间等。

Java中,我们会按照以下方式做一些事情:

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

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

4

5 回答 5

9

标准 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";
}

时钟的实际分辨率会因实现而异,但此代码将始终以纳秒为单位显示结果,尽可能准确地给出实现的滴答周期。

于 2012-08-07T19:35:14.820 回答
2

在 C++11 中,您可以使用 chrono 库执行此操作,其中 -

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

目前在 GCC 4.5.1 中实现。(还没有在 VC++ 中)。有关函数调用的Ideone.com执行时间,请参阅cppreference.com的示例代码

于 2012-08-07T17:55:15.890 回答
1

看看clockclock_t。对于您正在谈论的解决方案,我认为 C++ 中没有本机支持。要获得有意义的值,您必须对多次调用或构造进行计时,或者使用分析器(需要)。

于 2012-08-07T17:03:10.063 回答
0

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

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

尽管这可能会给您带来很多开销,即使您只是使用计时器功能初始化 SDL。(SDL_Init(SDL_INIT_TIMER)。

希望这对您有所帮助 - 我决定将此作为解决方案,因为它是可移植的。

于 2012-08-07T17:45:31.527 回答