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

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值