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

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

其原理就是通过自定义的时间计数器通过定时器定时累加.

你可能感兴趣的:(程序运行时间,动态显示时间,软件运行时间)