我试图在窗口中获取以毫秒为单位的经过时间。我发现要做到这一点的唯一方法是使用FILETIME结构获得1601年以来的100纳秒数。但是FILETIME结构会将值存储在两个变量中,我想知道如何减去这两个结构,将它们除以10000(以获得毫秒)并将结果存储在单个变量中 我正在使用C++ Visual Studio 2008速成版如何减去两个FILETIME?
回答
阅读的FILETIME
文档:
不建议您从FILETIME结构加减值来获得相对时间。相反,你应该的文件时,低和高位部分复制到一个ULARGE_INTEGER结构,执行QuadPart成员在64位运算,并复制LowPart和HighPart成员进入FILETIME结构体。
在那里你也有你的单一号码(ULARGE_INTEGER
结构的QuadPart
)。
+1,这就是问题如何解决。 – sharptooth 2012-04-04 10:58:35
好的,谢谢你,解决了这个问题。但它表示,如果编译器支持内置64位整数,则只能使用QuadPart。 Visual Studio支持它,但是当我制作可执行文件时,它可以在安装了Windows的任何系统中工作? – XaitormanX 2012-04-04 11:06:14
根据定义,可执行文件本身不再依赖于编译器。 – Joey 2012-04-04 11:18:02
FILETIME ft1;
FILETIME ft2;
int iDifferenceInMS = (*((ULONGLONG*)&ft2) - *((ULONGLONG*)&ft1))/10000;
这实际上可能非常糟糕。 FILETIMES是32位对齐的,而不是64位对齐的。这意味着,取决于编译器将变量放在内存中的位置,并取决于系统。这意味着在某些机器上运行时可能会崩溃。你不想要这种悲伤。 另一方面,ULARGE_INTEGER需要64位对齐,所以你不会得到这些对齐错误。 – Eagle 2014-08-08 22:03:00
- 1. 如何减去两个sparsevector?
- 2. 减去两个值
- 3. 如何减去两倍
- 4. 如何减去两个NSUInteger变量?
- 5. 如何减去两个gettimeofday实例?
- 6. 如何减去两个约达日期?
- 7. 如何减去两个日期在Laravel5.4
- 8. 我如何减去两个时间段
- 9. 如何减去jQuery中的两个值
- 10. 如何减去两个数组
- 11. 如何减去两个数字串
- 12. 如何减去两个字符串
- 13. 减去两行
- 14. SAS减去两个值
- 15. mongo减去两个字段
- 16. 减去两个数组
- 17. 减去两个结合域
- 18. 减去两个总计
- 19. 减去两个char成RAX
- 20. 减去两个结果
- 21. 减去两个数据集
- 22. 减去两个数据帧
- 23. 减去两个日期
- 24. 减去两个case语句
- 25. 减去两个子查询
- 26. 减去两个数据帧
- 27. 减去两个char指针
- 28. 减去两个MySQL查询
- 29. 减去两个变量
- 30. 如何减去两个结果的两个别名
编程语言?框架? – 2012-04-04 10:38:21
对不起,我以为我已经把它。我正在使用Visual Studio 2008 Express版的C++ – XaitormanX 2012-04-04 10:49:35
IMO这是一个完全合法的问题和答案,目前的措辞。它应该重新打开。 – 2014-04-04 16:32:53