问题描述: 我们在程序开发当中,经常会遇到某些子程序需要实现一天只启动一次的功能,该功能实现的方法有很多种,其原理都是通过记录标记为来实现的。本次要分享的也是利用程序标记为来实现的,而且只需要使用一个标记为:上次启动时间,并将这个标记为保存在注册表中!
实现原理: 1. 子程序第一次启动的时候,在注册表中创建一个新的键值,并且保存当前系统时间; (此部分代码省略)
2. 通过定时器去监测是否启动子程序,并对当前时间与当天的最后时间(23:59:59)进行比较;如果当前时间小于当天最后时间,不执行;如果大于,执行子程序,并且将当前时间更新到注册表中;
3. 时间比较是通过转换成long类型来实现的,因为将时间保存到注册表中是DWORD类型。
示例代码:
BOOL HasShowToday(UINT dueDays = 0) { BOOL bRt = FALSE; time_t lastTime = (time_t)GetTimeFromReg(); struct tm* pTm = localtime(&lastTime); // time_t -> tm pTm->tm_mday += dueDays; pTm->tm_hour = 23; pTm->tm_min = 59; pTm->tm_sec = 59; time_t dueTime = mktime(pTm); // tm -> time_t
DWORD dwCurTime = GetCurTime(); if ( (DWORD)dueTime < dwCurTime ) { bRt = TRUE; SetTimeToReg(GetCurTime()); } return bRt; }