VC++獲取系統時間,並用字串顯示
方法一 定時器方法
voidCDTTestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值
GetLocalTime( &sys );
switch (nIDEvent)
{
case 1:
strDate.Format("%4d-%2d-%2d",sys.wYear,sys.wMonth,sys.wDay);
strTime.Format("%2d:%2d:%2d",sys.wHour,sys.wMinute,sys.wSecond);
strDateAndTime=strDate;
strDateAndTime+=" ";
strDateAndTime+=strTime;
m_strStatusTime=strDateAndTime;
UpdateData(FALSE);
//KillTimer(1);//關閉Timer1
case 2:
break;
default:
break;
}//swtich 結束
CDialogEx::OnTimer(nIDEvent);
}
然後再初始化函式中增加語句:
SetTimer(1,1000,NULL); //啟動定時器,右下角狀態列獲取日期時間資訊
程式設計心得:
1) 定時器可以設定多個,用case語句區分執行內容
2) 將系統日期結構體時間轉換為字串方法為
strTime.Format("%2d:%2d:%2d",sys.wHour,sys.wMinute,sys.wSecond);
方法二 執行緒方法
voidCDTTestDlg::OnTimer(UINT_PTR nIDEvent)
1) 定義執行緒控制代碼
HANDLE startThread;
2) 宣告執行緒
在DTTestDlg.h開始部分宣告執行緒
UINTStartThread_GetDate(LPVOID pParam); //該執行緒獲取系統日期、時間
3) 執行緒的實現程式碼,在.cpp檔案中
UINTStartThread_GetDate(LPVOID pParam)//獲取系統時間,日期的執行緒
{
CDTTestDlg *obj=(CDTTestDlg *)pParam;
SYSTEMTIME sys;
BOOL m_bRun = TRUE;
while(m_bRun)
{
GetLocalTime( &sys );
obj->strDate.Format("%4d-%2d-%2d",sys.wYear,sys.wMonth,sys.wDay);
obj->strTime.Format("%2d:%2d:%2d",sys.wHour,sys.wMinute,sys.wSecond);
obj->strDateAndTime=obj->strDate;
obj->strDateAndTime+=" ";
obj->strDateAndTime+=obj->strTime;
obj->m_strStatusTime=obj->strDateAndTime; //
((CEdit*)obj->GetDlgItem(IDC_EDIT_TIME))->SetWindowTextA(obj->m_strStatusTime);
_sleep(800);
}
return 0;
}
4) 啟動執行緒在初始化函式中
啟動日期時間執行緒
startThread=NULL;
startThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartThread_GetDate,this,0,NULL);
程式設計心得:
1) 執行緒實現一定要有return 0;
2) 執行緒需要迴圈才能實現持續的獲取時間