【问题标题】:difference between two SYSTEMTIME variable两个 SYSTEMTIME 变量之间的差异
【发布时间】:2012-01-31 17:07:40
【问题描述】:

我想获得两个 SYSTEMTIME 变量之间的差异。我以前在这里看到有人问过这个问题,但他被告知将两个 SYSTEMTIME 结构都转换为 FILETIME.. 有没有其他方法来获得差异?

SYSTEMTIME st;
GetSystemTime(&st);

---这里有一些代码---

  SYSTEMTIME st2;
  GetSystemTime(&st2);

st-st2?

【问题讨论】:

  • 为什么不能按照大家的建议,将SYSTEMTIME 转换为FILETIME?

标签: c++ windows systemtime


【解决方案1】:
SYSTEMTIME operator-(const SYSTEMTIME& pSr,const SYSTEMTIME& pSl)
{
    SYSTEMTIME t_res;
    FILETIME v_ftime;
    ULARGE_INTEGER v_ui;
    __int64 v_right,v_left,v_res;
    SystemTimeToFileTime(&pSr,&v_ftime);
    v_ui.LowPart=v_ftime.dwLowDateTime;
    v_ui.HighPart=v_ftime.dwHighDateTime;
    v_right=v_ui.QuadPart;

    SystemTimeToFileTime(&pSl,&v_ftime);
    v_ui.LowPart=v_ftime.dwLowDateTime;
    v_ui.HighPart=v_ftime.dwHighDateTime;
    v_left=v_ui.QuadPart;

    v_res=v_right-v_left;

    v_ui.QuadPart=v_res;
    v_ftime.dwLowDateTime=v_ui.LowPart;
    v_ftime.dwHighDateTime=v_ui.HighPart;
    FileTimeToSystemTime(&v_ftime,&t_res);
    return t_res;
}

【讨论】:

  • 如果右边比左边早几秒钟......那么看起来你得到了很大的时间作为你的答案? SYSTEMTIME 由 WORD 成员(无符号)组成,因此不能表示负时差。
【解决方案2】:

It says pretty clearly on the MSDN documentation:

不建议您从 SYSTEMTIME结构获取相对时间。相反,你应该

  • 将 SYSTEMTIME 结构转换为 FILETIME 结构。
  • 将生成的 FILETIME 结构复制到 ULARGE_INTEGER 结构。
  • 对 ULARGE_INTEGER 值使用普通的 64 位算法。

为什么不这样做呢?

【讨论】:

  • 我想避免这种情况。但是,我会按照你的建议去做。如何扣除我创建的两个 ULARGE_INTEGER 结构?
  • 您可以只使用 64 位 int 类型。正如 MSDN (msdn.microsoft.com/en-us/library/aa383742(v=VS.85).aspx) 上所述:您的 C 编译器可能原生支持 64 位整数。例如,Microsoft Visual C++ 支持 __int64 大小的整数类型。有关详细信息,请参阅 C 编译器随附的文档。
【解决方案3】:

ft1 和 ft2 是文件时间结构

ULARGE_INTEGER ul1;
    ul1.LowPart = ft1.dwLowDateTime;
    ul1.HighPart = ft1.dwHighDateTime;

ULARGE_INTEGER ul2;
    ul2.LowPart = ft2.dwLowDateTime;
    ul2.HighPart = ft2.dwHighDateTime;


ul2.QuadPart -= ul1.QuadPart;

以毫秒为单位的差异...

ULARGE_INTEGER uliRetValue;
    uliRetValue.QuadPart = 0;


    uliRetValue = ul2;
    uliRetValue.QuadPart /= 10;
    uliRetValue.QuadPart /= 1000; // To Milliseconds

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多