我希望能够获得在我的C ++程序中执行某些操作所需的纳秒数。
对象创建,函数执行它的时间等等。
在Java
中,我们会采取以下措施:
long now = System.currentTimeMillis();
// stuff
long diff = (System.currentTimeMillis() - now);
你会如何在C ++中做同样的事情?
答案 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)
查看clock
和clock_t
。对于你所说的解决方案,我认为C ++中没有本机支持。要获得有意义的值,您必须为多个调用或构造计时,或使用分析器(所需)。
答案 3 :(得分:0)
多次被问及回答。
如果您使用的是C ++ 11,则可以考虑使用chrono
。
答案 4 :(得分:0)
我今天早些时候问过这个问题。我目前最好的解决方案是使用SDL,并致电:
uint32 a_time = SDL_GetTicks(); // Return uint32 count of milliseconds since SDL_Init was called
虽然这可能会给你带来很多开销,即使你只是使用定时器功能启动SDL。 (SDL_Init(SDL_INIT_TIMER)。
希望这会对你有所帮助 - 我为此解决了这个问题,因为它是可移植的。