本文简单介绍下VC中定时器设置。
首先,新建对话框应用程序,然后添加几个操作按钮。
定义相关变量
private: int m_nValue; DWORD m_dwTimeStarted; LARGE_INTEGER m_cupHZ; LARGE_INTEGER m_StartCount;
源文件
void CTimeCountDlg::OnTimer(UINT nIDEvent) { UpdateData(TRUE); switch(nIDEvent) { case 1: { m_nValue+=1000; m_sValue1.Format("%d",m_nValue); } break; case 2: { double dbTime = 0; dbTime = (::GetTickCount() - m_dwTimeStarted)*1.0; m_sValue2.Format("%f",dbTime); } break; case 3: { double dbTime = 0; MSG msg; UINT LFactor = 1000; while(::GetTickCount() - m_dwTimeStarted < 3*LFactor) { if (PeekMessage(&msg,0,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } dbTime = (::GetTickCount() - m_dwTimeStarted)*1.0; m_sValue3.Format("%f",dbTime); } break; case 4: { UINT LFactor = 1000; double dbTimestamp = 0; LARGE_INTEGER CurCount; QueryPerformanceCounter(&CurCount); CurCount.QuadPart = CurCount.QuadPart - m_StartCount.QuadPart; dbTimestamp = double(CurCount.QuadPart)*LFactor; dbTimestamp = dbTimestamp/double(m_cupHZ.QuadPart); m_sValue4.Format("%f",dbTimestamp); } break; default: break; } UpdateData(FALSE); CDialog::OnTimer(nIDEvent); } void CTimeCountDlg::OnButton1() { m_nValue = 0; SetTimer(1,1000,NULL); KillTimer(2); KillTimer(3); KillTimer(4); } void CTimeCountDlg::OnButton2() { m_dwTimeStarted = ::GetTickCount(); SetTimer(2,1000,NULL); KillTimer(1); KillTimer(3); KillTimer(4); } void CTimeCountDlg::OnButton3() { m_dwTimeStarted = ::GetTickCount(); SetTimer(3,1000,NULL); KillTimer(1); KillTimer(2); KillTimer(4); } void CTimeCountDlg::OnButton4() { QueryPerformanceFrequency(&m_cupHZ); m_StartCount.QuadPart = 0; QueryPerformanceCounter(&m_StartCount); SetTimer(4,1000,NULL); KillTimer(1); KillTimer(2); KillTimer(3); }
运行效果
总结:
按钮一:直接使用定时器操作
按钮二:获取操作系统运行时间,然后相减,立即开始
按钮三:获取操作系统运行时间,然后相减,*s内运行或者*s后开始
按钮四:查询定时器计数值
时间: 2024-10-12 17:43:19