[問題] 有關Timer的運作方式[MFC]

看板C_and_CPP (C/C++)作者 ( )時間16年前 (2009/04/28 16:19), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
我是使用VC6.0的MFC(dialog base)來進行開發 請問OnTimer中 當引發某個nIDEvent後 是不是會等到該case裡的程序跑完 才會在引發其他nIDEvent觸發的事件? 我在原本的程式中, 利用SetTimer(1,1000,NULL)以使視窗上某個LOGO持續轉動 (也就是每一秒會轉動一個方向,) switch(nIDEvent) { case 1: KillTimer(1); Count++; if(Count>=5) Count=1; if(Count==1) m_bmpCtrl1.LoadFile(1); if(Count==2) m_bmpCtrl1.LoadFile(2); if(Count==3) m_bmpCtrl1.LoadFile(3); if(Count==4) m_bmpCtrl1.LoadFile(4); break; case 2:......... 然後,因為程式的主要目地,是利用TCP/IP與某個設備進行溝通 並把資料顯示在視窗的項目上,並持續更新 關於這個更新的程序,我利用SetTimer(2...)來達成 但是因為這個更新過程會超過一秒鐘(about 5s),也使得原本該每秒轉動的LOGO 都要等待Timer #2 完成動作後,才會轉動, 甚至在那五秒的過程中,想要對視窗進行操作也會沒有反應 或lag 例如切換tab頁面、選擇combo box的項目以及按下視窗上的button 如果真的是如一開始所說這樣,timer不會同時存在? 那是不是我要改變程式的寫法? 利用多執行緒 或是 把那五秒的程序拉到timer之外來執行 然後timer #2觸發時,利用msg的傳遞來觸發掃瞄設備更新資料的程序? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 116.59.33.252

04/28 17:34, , 1F
用另一個thread來控制UI...
04/28 17:34, 1F

04/29 09:09, , 2F
timer只是WM_TIMER, 不是執行緒! 解決方法就像你最後一段所說
04/29 09:09, 2F

04/29 09:10, , 3F
但我覺得有必要每次都LoadFile嗎..Count不直接丟進函數裡嗎..
04/29 09:10, 3F
文章代碼(AID): #19zhmLaB (C_and_CPP)
文章代碼(AID): #19zhmLaB (C_and_CPP)