2013-02-09 89 views
0

我已经尝试过搜索而没有真正找到满足我要求的问题的答案,或者足够清楚地解释它。有没有timeGetTime()的标准库等价物?

我正在寻找一种函数或一种方法来实现一个函数,它可以通过timeGetTime()函数在Windows中执行的相同方式来检索tick或milliseconds的数量。

我正在寻找一种只使用标准C++,没有额外的库或平台特定的解决方案(如windows或linux等效的timeGetTime();多平台解决方案)。

我试图让我的代码平台独立于库的较低级别,我只想知道是否有人能告诉我/指向我将类似timeGetTime()的东西放在一起的方式。

感谢

更新:我不一定要找高性能和准确性,我只需要精确到毫秒,看看有多少时间,因为我最后一次检查已过。

+0

为什么'timeGetTime()'?它没有很好的分辨率,并在一段时间后溢出。为什么不使用'QueryPerformanceCounter'甚至是'GetTickCount64'? (顺便说一下,'QueryPerformanceCounter'的Linux相当于'clock_gettime'。) – Cameron 2013-02-09 00:28:27

+0

我不太在意哪个,timeGetTime只是一个我熟悉的函数,它可以从Windows的角度来做我所需要的。我只是在寻找不是平台特定的东西。 – 2013-02-09 00:30:53

+0

'timeGetTime'函数返回自Windows启动以来的**时间** - 您是否想要这么做,还是只想测量时间间隔? – jweyrich 2013-02-09 00:49:38

回答

1

您可以使用在C++ 11中添加的非常详细的<chrono>库。

它有不同类型的时钟取决于你想要什么,system_clock是唯一可以使用time_thigh_resolution_clock是可能的最小滴答。

定时事情,就是与它相对简单,例如:

#include <iostream> 
#include <chrono> 

int main() { 
    auto now = std::chrono::high_resolution_clock::now(); 
    //do stuff here 
    auto then = std::chrono::high_resolution_clock::now(); 
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(then-now).count(); 
} 
+0

这看起来像我可以使用的解决方案,但是,我收到一个编译异常,试图使用您的涉及duration_cast的示例。消息:没有函数模板“std :: chrono :: duration_cast”的实例匹配参数列表 – 2013-02-09 00:45:16

+0

@AdamGoss我似乎无法复制它,你使用的是什么编译器? – Rapptz 2013-02-09 00:46:04

+0

不要紧,我已经改变它现在使用当时的部分,因为我只是有兴趣得到一个点的时间值。调用time_since_epoch摆脱编译错误。我认为这是我所追求的。 – 2013-02-09 00:47:33

3

C++ 11添加标题<chrono>它提供了一种标准化的方式来读取比旧的localtime更高的分辨率的系统时间。然而,平台的准确度变化很大。

steady_clock类可能对您最有用。

相关问题