在C++中,我能以毫秒为单位获得时间吗

Can I just get time as milliseconds without pain in C++?

本文关键字:为单位 时间 C++      更新时间:2023-10-16

所以我找到了这个答案。它构造时间的方式看起来很奇怪(想象一下没有auto的情况),但它在Visual Studio 2010中也不起作用,因为MSVC版本太旧了。我无法选择我使用的Visual Studio,所以我需要坚持它。Visual Studio错误:

fatal error C1083: Cannot open include file: 'chrono': No such file or directory

所以我看了一下其他的答案,其中大多数像milion怪异的struct一样声明使用totally::freaky<time> factories,因为他们试图获得高精度的时间。我对±5毫秒的时间非常满意——我测量的时间是100-5000毫秒。

那么,如何使用旧的C++标准库获得近似的系统/cpu毫秒时间呢(MSVC2010)

PS.:在我们项目中的一些记录器文件中,我发现了以下内容:

datetimeEx(){
    time_t timer;
    time( &timer );
    tm *t = localtime( &timer );
    char tmp[32];
    sprintf(tmp, "%02d%02d%02d %02d%02d%02d", t->tm_year - 100, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
    log << tmp;
    return log;
}

它产生的时间是这样的:2015-11-02 16:53:57:389我用它玩过,但我看不出两次之间的区别。

我可能会使用Boost Chrono。它构成了现在标准库中的<chrono>的基础,并且工作原理非常相似。当您可以升级编译器时,转换为使用标准库设施应该相对容易(事实上,在许多情况下,它可以像将using namespace boost::chrono;更改为using namespace std::chrono;一样简单)。

无论如何,只要关心一下你决定使用哪个时钟,这就可以满足你的要求,而且代码仍然可以合理地移植——当然可以移植到Windows、Linux和Mac OS等主要系统,我希望(尽管我还没有亲自测试)也可以移植到大多数其他Unixesque系统。

要计算时差,GetTickCount()很方便。它返回自系统启动以来经过的时间(以毫秒为单位)。

DWORD time1 = GetTickCount();
Something();
DWORD timediff = GetTickCount() - time1;

localtime不会帮助您。它是标准的C,但它只给你一秒的分辨率。gettimeofday在Posix上可用,但在Windows上不可用。计算窗口时差的标准答案是QueryPerformanceTimer。如果您不需要那么高的分辨率,可以使用GetSystemTime