vc中定時器並非多線程

 

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並非多線程的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章