?? multi_timerdlg.cpp
字號(hào):
End_time = COleDateTime::GetCurrentTime()-Start_time;
}
}
return 0;
}
void CMulti_TimerDlg::OnUpdateTime1()
{
struct _timeb timebuffer;
char *timeline;
//獲得毫秒級(jí)的時(shí)間
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化時(shí)間
m_strTime.Format("當(dāng)前時(shí)間是:%.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);
//以上四行是實(shí)現(xiàn)在延時(shí)或定時(shí)期間能處理其他的消息,雖然這樣可以降低CPU的占有率,
//但降低了延時(shí)或定時(shí)精度,實(shí)際應(yīng)用中可以去掉,去掉后誤差降低。
dwEnd = GetTickCount()- dwStart;
} while(dwEnd <50);
SetDlgItemInt(IDC_EDIT3,(dwEnd-50),true);
MessageBox("50ms延時(shí)已到,其誤差為文本框中的值!");
}
void CMulti_TimerDlg::OnButtonTime41()
{
AfxBeginThread(ShowTime4_1_Proc,this);//開啟定時(shí)器
}
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);//發(fā)送消息通知對(duì)話框該更新時(shí)間了
do
{
dwStop = GetTickCount();
}while(dwStop-10<dwStart);
}
return 0;
}
void CMulti_TimerDlg::OnUpdateTime2()
{
struct _timeb timebuffer;
char *timeline;
//獲得毫秒級(jí)的時(shí)間
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化時(shí)間
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延時(shí)已到,其誤差為文本框中的值!");
}
void CMulti_TimerDlg::OnButtonTime51()
{
AfxBeginThread(ShowTime5_1_Proc,this);//開啟定時(shí)器
}
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);//發(fā)送消息通知對(duì)話框該更新時(shí)間了
do
{
dwStop = timeGetTime();
}while(dwStop-10<dwStart);
}
return 0;
}
void CMulti_TimerDlg::OnUpdateTime3()
{
struct _timeb timebuffer;
char *timeline;
//獲得毫秒級(jí)的時(shí)間
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化時(shí)間
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("在此回調(diào)函數(shù)中安排需要執(zhí)行的任務(wù)");
}
void CMulti_TimerDlg::OnUpdateTime4()
{
struct _timeb timebuffer;
char *timeline;
//獲得毫秒級(jí)的時(shí)間
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化時(shí)間
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("在此回調(diào)函數(shù)中安排需要周期性執(zhí)行的任務(wù)");
}
void CMulti_TimerDlg::OnUpdateTime5()
{
struct _timeb timebuffer;
char *timeline;
//獲得毫秒級(jí)的時(shí)間
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化時(shí)間
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; // 獲得計(jì)數(shù)器的時(shí)鐘頻率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart; // 獲得初始值
do{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;// 獲得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq; // 獲得對(duì)應(yīng)的時(shí)間值,單位為秒
}while(dfTim<0.001);
CString str1;
str1.Format("%.12f",(dfTim-0.001)*1000);
SetDlgItemText(IDC_EDIT6,str1);
MessageBox("1ms延時(shí)已到,其誤差為文本框中的值,單位為ms!");
}
void CMulti_TimerDlg::OnButtonTime71()
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart; // 獲得計(jì)數(shù)器的時(shí)鐘頻率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart; // 獲得初始值
do{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;// 獲得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq; // 獲得對(duì)應(yīng)的時(shí)間值,單位為秒
}while(dfTim<0.000001);
CString str1;
str1.Format("%.12f",(dfTim-0.000001)*1000000);
SetDlgItemText(IDC_EDIT6,str1);
MessageBox("1微妙延時(shí)已到,其誤差為文本框中的值,單位為微妙!");
}
void CMulti_TimerDlg::OnButtonTime72()
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart; // 獲得計(jì)數(shù)器的時(shí)鐘頻率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart; // 獲得初始值
Sleep(100);
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;// 獲得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq; // 獲得對(duì)應(yīng)的時(shí)間值,單位為秒
CString str2;
str2.Format("%.12f",(dfTim*1000-100));
SetDlgItemText(IDC_EDIT7,str2);
MessageBox("由于Sleep()函數(shù)自身的誤差,程序每次執(zhí)行的結(jié)果都會(huì)有微小誤差,其誤差為文本框中的值,單位為ms!");
}
void CMulti_TimerDlg::OnButtonTime73()
{
AfxBeginThread(ShowTime6_1_Proc,this);//開啟定時(shí)器
}
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; // 獲得計(jì)數(shù)器的時(shí)鐘頻率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart; // 獲得初始值
QPart2=QPart1;
while(TRUE)
{
QPart1 = QPart2;// 上一次的終止值變成新的起始值
::SendMessage(pDlg->m_hWnd,WM_UPDATETIME6,0,0);//發(fā)送消息通知對(duì)話框該更新時(shí)間了
do{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;// 獲得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq; // 獲得對(duì)應(yīng)的時(shí)間值,單位為秒
}while(dfTim<0.000001);
}
return 0;
}
void CMulti_TimerDlg::OnUpdateTime6()
{
struct _timeb timebuffer;
char *timeline;
//獲得毫秒級(jí)的時(shí)間
_ftime( &timebuffer );
timeline = ctime(&(timebuffer.time));
//格式化時(shí)間
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();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -