MFC 以毫秒为单位的测量功能

Posted

技术标签:

【中文标题】MFC 以毫秒为单位的测量功能【英文标题】:MFC measure function in milliseconds 【发布时间】:2012-12-11 09:20:27 【问题描述】:

我如何计算某个函数(重复调用)所花费的毫秒数? 我想到了:CTime::GetCurrentTM()之前,CTime::GetCurrentTM()之后,

然后将结果插入CTimeSpan diff = after - before。 最后将该差异存储到对所有差异求和的全局成员,因为我想知道这个函数花费的总时间。

但它会在几秒内而不是毫秒内给出答案。

【问题讨论】:

【参考方案1】:

MFC 是 C++,对吧?

如果是这样,您可以使用clock()

#include <ctime>

clock_t time1 = clock();
// do something heavy
clock_t time2 = clock();
clock_t timediff = time2 - time1;

float timediff_sec = ((float)timediff) / CLOCKS_PER_SEC;

这通常会给你毫秒精度。

【讨论】:

timediff_sec * 1000 为毫秒值,否则显示秒值。【参考方案2】:

如果您使用 MFC,最好的方法是使用 WIN API。由于您只是担心计算时差,因此下面的函数可能非常适合您。

GetTickCount64()

直接返回系统启动后的number of milli seconds that has elapsed。

如果您不打算让您的系统长时间运行(正好超过 49.7 天),请使用更快的版本 - GetTickCount() 函数

【讨论】:

因为是基于系统启动时间的,所以在我看来这种方法有一个问题:当计算机很少重新启动时:它可能会溢出计数器!【参考方案3】:

众所周知,COleDateTime 在内部以毫秒为单位工作,因为它将时间戳存储在其 m_dt 变量中,该变量是 DATE 类型,因此具有用于预期目的的分辨率。

我可以建议你把时间安排在

DATE now= (DATE) COleDateTime::GetCurrentTime();

然后进行相应的计算。

【讨论】:

以上是关于MFC 以毫秒为单位的测量功能的主要内容,如果未能解决你的问题,请参考以下文章

/usr/bin/time --format 输出经过的时间,以毫秒为单位

System类

如何从以毫秒为单位的长度中找到以帧、字节和整数为单位的音符长度

如何以毫秒为单位获得两个 QDateTimes 之间的差异?

以毫秒为单位获取以毫秒为单位的午夜纪元时间

命令以毫秒为单位获取时间