zoukankan      html  css  js  c++  java
  • C++获取系统当前时间(精确到微秒)

    获取系统当前时间

    在调试、日志输出、代码优化时,我们常常需要获得系统的时间。在一些性能要求高的代码优化时,对时间的精确度还比较高。在网上找不高质量的代码,便自己研究了一下,代码如下(能满足跨平台的要求,单位精确到微秒):

    #ifdef _WIN32
    #include <windows.h>
    #else
    #include <time.h>
    #endif  // _WIND32
    
    
    // 定义64位整形
    #if defined(_WIN32) && !defined(CYGWIN)
    typedef __int64 int64_t;
    #else
    typedef long long int64t;
    #endif  // _WIN32
    
    // 获取系统的当前时间,单位微秒(us)
    int64_t GetSysTimeMicros()
    {
    #ifdef _WIN32
    // 从1601年1月1日0:0:0:000到1970年1月1日0:0:0:000的时间(单位100ns)
    #define EPOCHFILETIME   (116444736000000000UL)
        FILETIME ft;
        LARGE_INTEGER li;
        int64_t tt = 0;
        GetSystemTimeAsFileTime(&ft);
        li.LowPart = ft.dwLowDateTime;
        li.HighPart = ft.dwHighDateTime;
        // 从1970年1月1日0:0:0:000到现在的微秒数(UTC时间)
        tt = (li.QuadPart - EPOCHFILETIME) /10;
        return tt;
    #else
        timeval tv;
        gettimeofday(&tv, 0);
        return (int64_t)tv.tv_sec * 1000000 + (int64_t)tv.tv_usec;
    #endif // _WIN32
        return 0;
    }

    代码说明

    在类Unix平台(Linux、OS-X)使用gettimeofday方法,这个简单,没什么好说,自己看代码。在Windows平台使用GetSystemTimeAsFileTime方法,这个需解释一下。

    GetSystemTimeAsFileTime的输出参数是LPFILETIME,其结构如下:

    typedef struct _FILETIME {
       DWORD dwLowDateTime;
       DWORD dwHighDateTime; 
    } FILETIME, *PFILETIME;

    这个结构可表示为一个64位的数值,两个成为分别代码低32位和高32位,代表1601年1月1日开始到现在的计数器,计数间隔为100纳秒。 

    li.LowPart = ft.dwLowDateTime;
    li.HighPart = ft.dwHighDateTime;

    是将结构体转换成64位整形LARGE_INTEGER::QuadPart。 
    #define EPOCHFILETIME (116444736000000000UL)表示从1601年1月1日0:0:0:000到1970年1月1日0:0:0:000的时间(单位100ns)。

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/chixinfushui/p/9024262.html
Copyright © 2011-2022 走看看