我希望能够获得在我的 C++ 程序中做某事所需的纳秒数。
对象创建,函数完成它的时间等。
在Java
中,我们会按照以下方式做一些事情:
long now = System.currentTimeMillis();
// stuff
long diff = (System.currentTimeMillis() - now);
你会如何在 C++ 中做同样的事情?
我希望能够获得在我的 C++ 程序中做某事所需的纳秒数。
对象创建,函数完成它的时间等。
在Java
中,我们会按照以下方式做一些事情:
long now = System.currentTimeMillis();
// stuff
long diff = (System.currentTimeMillis() - now);
你会如何在 C++ 中做同样的事情?
标准 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";
}
时钟的实际分辨率会因实现而异,但此代码将始终以纳秒为单位显示结果,尽可能准确地给出实现的滴答周期。
在 C++11 中,您可以使用 chrono 库执行此操作,其中 -
类模板 std::chrono::duration 表示一个时间间隔。它由 Rep 类型的滴答计数和滴答周期组成,其中滴答周期是编译时有理常数,表示从一个滴答到下一个滴答的秒数。
目前在 GCC 4.5.1 中实现。(还没有在 VC++ 中)。有关函数调用的Ideone.com执行时间,请参阅cppreference.com的示例代码
看看clock
和clock_t
。对于您正在谈论的解决方案,我认为 C++ 中没有本机支持。要获得有意义的值,您必须对多次调用或构造进行计时,或者使用分析器(需要)。
多次询问和回答。
如果你使用 C++11,你可以考虑chrono
.
我今天早些时候问了这个确切的问题。我目前最好的解决方案是使用 SDL,并调用:
uint32 a_time = SDL_GetTicks(); // Return uint32 count of milliseconds since SDL_Init was called
尽管这可能会给您带来很多开销,即使您只是使用计时器功能初始化 SDL。(SDL_Init(SDL_INIT_TIMER)。
希望这对您有所帮助 - 我决定将此作为解决方案,因为它是可移植的。