vc中定時器並非多線程
VC++中timer很容易給人感覺是多線程的。其實不然,他是通過消息觸發事件的。。通過SetTimer函數設定定時器後,在規定時間內向消息隊列中加入wm_timer消息來觸發事件。並且只有該消息返回後才處理下個消息。
可以通過程序來驗證。
BOOL bThreadEnd = TRUE;
UINT ThreadPro(LPVOID pParam);
void CTestThreadDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
//死循環。。這時候窗口不會響應事件。
int a =1;
if (bThreadEnd)//全局變量確保線程只創建一個
{
pMyThread = AfxBeginThread(ThreadPro, (LPVOID)&a);//創建線程
bThreadEnd = false;
}
CDialog::OnTimer(nIDEvent);
}
UINT ThreadPro(LPVOID pParam) //線程事件函數
{
while (1)
{
}
bThreadEnd = true;
return 1;
}
以上程序,用timer的死循環和線程事件函數的死循環對比可知。。timer並非多線程的。