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 输出经过的时间,以毫秒为单位
如何从以毫秒为单位的长度中找到以帧、字节和整数为单位的音符长度