当前位置:  开发笔记 > 编程语言 > 正文

C++的时差

如何解决《C++的时差》经验,为你挑选了4个好方法。

有谁知道如何用毫秒计算C++的时差?我曾经使用difftime但它没有足够的精度来衡量我正在测量的东西.



1> Howard Hinna..:

我知道这是一个老问题,但有一个更新的C++ 0x答案.有一个新的标题,其中包含现代时间实用程序.使用示例:

#include 
#include 
#include 

int main()
{
    typedef std::chrono::high_resolution_clock Clock;
    typedef std::chrono::milliseconds milliseconds;
    Clock::time_point t0 = Clock::now();
    std::this_thread::sleep_for(milliseconds(50));
    Clock::time_point t1 = Clock::now();
    milliseconds ms = std::chrono::duration_cast(t1 - t0);
    std::cout << ms.count() << "ms\n";
}

50ms

更多信息可以在这里找到:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm

现在还有一个推动实施.



2> Tyler McHenr..:

您必须使用一个更具体的时间结构,timeval(微秒分辨率)或timespec(纳秒分辨率),但您可以相当容易地手动执行:

#include 

int diff_ms(timeval t1, timeval t2)
{
    return (((t1.tv_sec - t2.tv_sec) * 1000000) + 
            (t1.tv_usec - t2.tv_usec))/1000;
}

如果时间差异非常大(或者如果你有16位整数),这显然存在整数溢出的一些问题,但这可能不是常见的情况.


您可能希望在除以1000之前添加+500 usec,以便999usec向上舍入为1毫秒而不是0毫秒.
不,我的意思是*1000000.它在我们中进行计算,然后在最后转换为ms.不过,+ 500的建议很好.

3> Nuno..:

如果你正在使用win32 FILETIME是你能得到的最准确的:包含一个64位值,表示自1601年1月1日(UTC)以来100纳秒间隔的数量.

因此,如果要计算两次之间的差异(以毫秒为单位),请执行以下操作:

UINT64 getTime()
{
    SYSTEMTIME st;
    GetSystemTime(&st);

    FILETIME ft;
    SystemTimeToFileTime(&st, &ft);  // converts to file time format
    ULARGE_INTEGER ui;
    ui.LowPart=ft.dwLowDateTime;
    ui.HighPart=ft.dwHighDateTime;

    return ui.QuadPart;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    //! Start counting time
    UINT64   start, finish;

    start=getTime();

    //do something...

    //! Stop counting elapsed time
    finish = getTime();

    //now you can calculate the difference any way that you want
    //in seconds:
    _tprintf(_T("Time elapsed executing this code: %.03f seconds."), (((float)(finish-start))/((float)10000))/1000 );
    //or in miliseconds
    _tprintf(_T("Time elapsed executing this code: %I64d seconds."), (finish-start)/10000 );
}



4> Bill the Liz..:

时钟功能为您提供毫秒计时器,但它不是最好的.它的真正分辨率取决于您的系统.你可以试试

#include 

int clo = clock();
//do stuff
cout << (clock() - clo) << endl;

并看看你的结果如何.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有