您的位置:首页 > 其它

如何动态的显示程序运行的时间

2016-05-04 11:21 253 查看
假设你在做一个小软件,需要动态显示某个软件功能运行所花费的时间.就像杀毒那样,上面会有运行时间。动态显示很简单,首先想到的就是设置一个定时器,每隔一秒获取当前系统的时间,然后和程序刚运行的时间相减就能得出运行时间了。但是这样就有一个问题,假如中途你这个程序想要暂停一会,然后继续,你会发现,显示的时间突然跳变了,因为在你暂停的那一会,系统的时间是在流逝的,并不会暂停,只是你暂停显示了而已。而我想要的效果就是你暂停了,再继续时间还是接着原来的继续一秒一秒的变化.这里我介绍一种简单的方法,当然了精度也只能是1秒,如果需要高精度的朋友请自行google.

方法如下:

添加三个成员变量

UINT m_uSecond;  //小时,分钟,秒
UINT m_uMinute;
UINT m_uHour;


并在构造函数中初始化为0

假设现在是你一按下开始按钮就开始运行时间,按下暂停按钮就暂停,再按就继续

所以你要在开始按钮事件函数中添加如下代码:

CString s;
s.Format(TEXT("%u:%u:%u"), m_uHour, m_uMinute, m_uSecond);
SetDlgItemText(IDC_STATIC_TIME, s);
SetTimer(1, 1000, NULL);


在暂停按钮中添加如下代码:

if(m_bPause == FALSE)
{
KillTimer(1);
m_bPause = TRUE;
SetDlgItemText(IDC_STATIC_TIME,TEXT("继续"));
}
else
{
SetTimer(1, 1000, NULL);
m_bPause = FALSE;
SetDlgItemText(IDC_STATIC_TIME,TEXT("暂停"));
}


然后再定时器函数中添加如下代码:

if (m_uSecond == 59)
{
++m_uMinute;
m_uSecond = 0;
}
else if (m_uMinute == 59)
{
++m_uHour;
m_uMinute = 0;
}

CString s;
s.Format(TEXT("%u:%u:%u"), m_uHour, m_uMinute, ++m_uSecond);
SetDlgItemText(IDC_STATIC_TIME, s);


其原理就是通过自定义的时间计数器通过定时器定时累加.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: