📄 multi_timerdlg.cpp
字号:
End_time = COleDateTime::GetCurrentTime()-Start_time;
}
}
return 0;
}
void CMulti_TimerDlg::OnUpdateTime1()
{
struct _timeb timebuffer;
char *timeline;
//获得毫秒级的时间
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化时间
m_strTime.Format("当前时间是:%.19s %s", timeline, &timeline[20]);
UpdateData(FALSE);
}
void CMulti_TimerDlg::OnButtonTime4()
{
SetDlgItemInt(IDC_EDIT3,0,true);
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
MSG msg;
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
//以上四行是实现在延时或定时期间能处理其他的消息,虽然这样可以降低CPU的占有率,
//但降低了延时或定时精度,实际应用中可以去掉,去掉后误差降低。
dwEnd = GetTickCount()- dwStart;
} while(dwEnd <50);
SetDlgItemInt(IDC_EDIT3,(dwEnd-50),true);
MessageBox("50ms延时已到,其误差为文本框中的值!");
}
void CMulti_TimerDlg::OnButtonTime41()
{
AfxBeginThread(ShowTime4_1_Proc,this);//开启定时器
}
UINT ShowTime4_1_Proc(LPVOID lParam)
{
CMulti_TimerDlg* pDlg = (CMulti_TimerDlg*)lParam;
DWORD dwStart, dwStop;
dwStop = GetTickCount();// 起始值和终止值
while(TRUE)
{
dwStart = dwStop;// 上一次的终止值变成新的起始值
::SendMessage(pDlg->m_hWnd,WM_UPDATETIME2,0,0);//发送消息通知对话框该更新时间了
do
{
dwStop = GetTickCount();
}while(dwStop-10<dwStart);
}
return 0;
}
void CMulti_TimerDlg::OnUpdateTime2()
{
struct _timeb timebuffer;
char *timeline;
//获得毫秒级的时间
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化时间
CString m_Str;
m_Str.Format("%.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20]);
SetDlgItemText(IDC_EDIT3,m_Str);
}
void CMulti_TimerDlg::OnButtonTime5()
{
SetDlgItemInt(IDC_EDIT4,0,true);
DWORD dwStart = timeGetTime();
DWORD dwEnd = dwStart;
do
{
dwEnd = timeGetTime()- dwStart;
} while(dwEnd <120);
SetDlgItemInt(IDC_EDIT4,(dwEnd-120),true);
MessageBox("120ms延时已到,其误差为文本框中的值!");
}
void CMulti_TimerDlg::OnButtonTime51()
{
AfxBeginThread(ShowTime5_1_Proc,this);//开启定时器
}
UINT ShowTime5_1_Proc(LPVOID lParam)
{
CMulti_TimerDlg* pDlg = (CMulti_TimerDlg*)lParam;
DWORD dwStart, dwStop;
dwStop = timeGetTime();// 起始值和终止值
while(TRUE)
{
dwStart = dwStop;// 上一次的终止值变成新的起始值
::SendMessage(pDlg->m_hWnd,WM_UPDATETIME3,0,0);//发送消息通知对话框该更新时间了
do
{
dwStop = timeGetTime();
}while(dwStop-10<dwStart);
}
return 0;
}
void CMulti_TimerDlg::OnUpdateTime3()
{
struct _timeb timebuffer;
char *timeline;
//获得毫秒级的时间
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化时间
CString m_Str;
m_Str.Format("%.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20]);
SetDlgItemText(IDC_EDIT4,m_Str);
}
void CMulti_TimerDlg::OnButtonTime6()
{
TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
(LPTIMECALLBACK) OneMilliSecondProc,
(DWORD)this,TIME_ONESHOT);
}
void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
CMulti_TimerDlg *timer =(CMulti_TimerDlg *)dwUser;
timer->SendMessage(WM_UPDATETIME4,0,0);
//timeKillEvent(TimerID_1ms);
//AfxMessageBox("在此回调函数中安排需要执行的任务");
}
void CMulti_TimerDlg::OnUpdateTime4()
{
struct _timeb timebuffer;
char *timeline;
//获得毫秒级的时间
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化时间
CString m_Str;
m_Str.Format("%.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20]);
SetDlgItemText(IDC_EDIT5,m_Str);
}
void CMulti_TimerDlg::OnButtonTime61()
{
TimerID1_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
(LPTIMECALLBACK) OneMilliSecondProc1,
(DWORD)this,TIME_PERIODIC);
}
void PASCAL OneMilliSecondProc1(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
CMulti_TimerDlg *timer =(CMulti_TimerDlg *)dwUser;
timer->SendMessage(WM_UPDATETIME5,0,0);
// timeKillEvent(TimerID1_1ms);
// AfxMessageBox("在此回调函数中安排需要周期性执行的任务");
}
void CMulti_TimerDlg::OnUpdateTime5()
{
struct _timeb timebuffer;
char *timeline;
//获得毫秒级的时间
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化时间
CString m_Str;
m_Str.Format("%.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20]);
SetDlgItemText(IDC_EDIT5,m_Str);
}
void CMulti_TimerDlg::OnButtonTime7()
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart; // 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart; // 获得初始值
do{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;// 获得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq; // 获得对应的时间值,单位为秒
}while(dfTim<0.001);
CString str1;
str1.Format("%.12f",(dfTim-0.001)*1000);
SetDlgItemText(IDC_EDIT6,str1);
MessageBox("1ms延时已到,其误差为文本框中的值,单位为ms!");
}
void CMulti_TimerDlg::OnButtonTime71()
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart; // 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart; // 获得初始值
do{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;// 获得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq; // 获得对应的时间值,单位为秒
}while(dfTim<0.000001);
CString str1;
str1.Format("%.12f",(dfTim-0.000001)*1000000);
SetDlgItemText(IDC_EDIT6,str1);
MessageBox("1微妙延时已到,其误差为文本框中的值,单位为微妙!");
}
void CMulti_TimerDlg::OnButtonTime72()
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart; // 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart; // 获得初始值
Sleep(100);
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;// 获得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq; // 获得对应的时间值,单位为秒
CString str2;
str2.Format("%.12f",(dfTim*1000-100));
SetDlgItemText(IDC_EDIT7,str2);
MessageBox("由于Sleep()函数自身的误差,程序每次执行的结果都会有微小误差,其误差为文本框中的值,单位为ms!");
}
void CMulti_TimerDlg::OnButtonTime73()
{
AfxBeginThread(ShowTime6_1_Proc,this);//开启定时器
}
UINT ShowTime6_1_Proc(LPVOID lParam)
{
CMulti_TimerDlg* pDlg = (CMulti_TimerDlg*)lParam;
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart; // 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart; // 获得初始值
QPart2=QPart1;
while(TRUE)
{
QPart1 = QPart2;// 上一次的终止值变成新的起始值
::SendMessage(pDlg->m_hWnd,WM_UPDATETIME6,0,0);//发送消息通知对话框该更新时间了
do{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;// 获得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq; // 获得对应的时间值,单位为秒
}while(dfTim<0.000001);
}
return 0;
}
void CMulti_TimerDlg::OnUpdateTime6()
{
struct _timeb timebuffer;
char *timeline;
//获得毫秒级的时间
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化时间
CString m_Str;
m_Str.Format("%.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20]);
SetDlgItemText(IDC_EDIT8,m_Str);
}
void CMulti_TimerDlg::OnAbout()
{
CAboutDlg dlg;
dlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -