#include "StdAfx.h" #include "WorkTime.h" #include "PciCh365Mgr.h" CWorkTime gWorkTime; CWorkTime::CWorkTime(void) { m_bRecordTime = false;//是否正在计时 m_LastWorkTime = "上次时间:"; } CWorkTime::~CWorkTime(void) { } CString CWorkTime::Time2Str(int n) { CString s; if(n<10) s.Format("0%ld",n);//左边补0 else s.Format("%ld",n); return s; } #if 1//粗略计时 //开始计时 void CWorkTime::StartRecordTime() { m_bRecordTime = true; m_StartTime=CTime::GetCurrentTime(); } void CWorkTime::StopRecordTime() { m_bRecordTime = false; } CString CWorkTime::GetTimeSpanStr() { if(!m_bRecordTime) return "00:00:00"; //获取当前系统时间 CTime CurTime; CTimeSpan TimeSpan;//时间差 CurTime=CTime::GetCurrentTime(); TimeSpan = CurTime - m_StartTime; return GetTimeSpanStr(TimeSpan); } CTimeSpan CWorkTime::GetTimeSpan() { //获取当前系统时间 CTime CurTime; CTimeSpan TimeSpan;//时间差 CurTime=CTime::GetCurrentTime(); TimeSpan = CurTime - m_StartTime; return TimeSpan; } //获取当前经过时间 CString CWorkTime::GetTimeSpanStr(CTimeSpan &TimeSpan) { return Time2Str(TimeSpan.GetHours())+":"+Time2Str(TimeSpan.GetMinutes())+":"+Time2Str(TimeSpan.GetSeconds()); } CString CWorkTime::GetCurDate(CString Separator) { CString str; CTime CurTime; CurTime=CTime::GetCurrentTime(); str += Time2Str(CurTime.GetYear())+Separator; str += Time2Str(CurTime.GetMonth())+Separator; str += Time2Str(CurTime.GetDay()); return str; } //获取当前时间Separator 为分隔符 CString CWorkTime::GetCurTime(CString Separator) { CString str; CTime CurTime; CurTime=CTime::GetCurrentTime(); str += Time2Str(CurTime.GetHour())+Separator; str += Time2Str(CurTime.GetMinute())+Separator; str += Time2Str(CurTime.GetSecond()); return str; } //当前经过了多少分钟 int CWorkTime::GetTimeSpanMin(CTimeSpan &TimeSpan) { int m = 0; m += TimeSpan.GetHours() * 60; m += TimeSpan.GetMinutes(); return m; } //记录最近一次运行时间 void CWorkTime::SaveLastWorkTime() { m_LastWorkTime = "上次时间:" + GetTimeSpanStr(); } #endif #if 1//精确计时 //开始精确计时 void CWorkTime::StartExactTime() { QueryPerformanceCounter(&m_ExactStart); } //获取精确时间,单位是ms int CWorkTime::GetExactTime() { LARGE_INTEGER EndTime; QueryPerformanceCounter(&EndTime); int ret = ((EndTime.QuadPart - m_ExactStart.QuadPart)*1000)/(gPciCh365Mgr->GetClockFre().QuadPart); return ret; } #endif #if 1//倒计时功能 //当前经过了多少秒 double CWorkTime::GetTimeSpanSecond() { CTimeSpan TimeSpan = GetTimeSpan(); int s = 0; s += TimeSpan.GetHours() * 60 * 60; s += TimeSpan.GetMinutes() * 60; s += TimeSpan.GetSeconds(); return s; } //开始倒计时 void CWorkTime::StartBackTime(double s) { m_BackTimeSeconds = s; StartRecordTime(); } //获取还剩多少时间 CString CWorkTime::GetLeftTimes() { double CurSeconds = GetTimeSpanSecond();//当前经过的秒数 int LeftSeconds = (int)(m_BackTimeSeconds-CurSeconds); CString str = "00:00:00"; if(LeftSeconds>0) { int Seconds = LeftSeconds % 60; LeftSeconds -= Seconds; int Minutes = (LeftSeconds%3600)/60; LeftSeconds -= Minutes*60; int Hours = LeftSeconds/3600; str = Time2Str(Hours)+":"+Time2Str(Minutes)+":"+Time2Str(Seconds); } return str; } //倒计时是否结束 bool CWorkTime::IsBackTimeEnd() { if(!m_bRecordTime)//已经结束 return true; double CurSeconds = GetTimeSpanSecond();//当前经过的秒数 if(CurSeconds > m_BackTimeSeconds) { m_bRecordTime = false; return true; } return false; } #endif