我用定時器用來顯示當前時間,然后建立一個執行緒也顯示時間。運行程式后,定時器顯示的時間正常。但是,按下按鈕建立執行緒之后,定時器的時間重繪的很慢,有時候三四秒才變化一次。這是為什么啊。
uj5u.com熱心網友回復:
沒人啊
uj5u.com熱心網友回復:
定時器訊息的優先級別很低的, 精度也不是很高, 適合對精度要求不高的情況, 精度要求高的情況推薦多執行緒uj5u.com熱心網友回復:
WM_TIMER優先級很低,如果你的程式在平凡的做繪制或者產生了很多其他的優先級高于它的訊息,那么它的處理就會變得很慢,再一個,定時器本身受CPU的影響比較大,如果CPU負載很高,WM_TIMER的產生的時間差也會不準,如果你用來做模擬時鐘,那么建議你的SetTimer的超時時間設定短一些,然后在WM_TIMER的處理函式里面用實際時間差來作為重繪的依據:比如的SetTimer超時設為100ms,每次OnTimer回掉時都判斷當前時間和上一次時間的差是否>1000ms,然后決定是否重繪:
VOID GetLocalTime( LPSYSTEMTIME lpSystemTime // system time);
uj5u.com熱心網友回復:
Timer優先級很低的uj5u.com熱心網友回復:
執行緒里適當的 Sleep,WM_TIMER 只要訊息佇列中有訊息 就不會被派發, 因此執行緒中發送訊息到訊息佇列的話會影響定時器
uj5u.com熱心網友回復:
The WM_TIMER message is a low-priority message. The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue.uj5u.com熱心網友回復:
執行緒太占CPU也同樣會導致訊息執行緒變卡, 更新慢也就正常了.或者你執行緒中POST到UI執行緒的訊息非常多(可能你執行緒中會發送SET_WINDOWTEXT訊息,設定文本資訊), 這樣低優先級的WM_TIMER訊息就不容易得到回應的機會.
uj5u.com熱心網友回復:
綜上所述,會。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/115428.html
標籤:進程/線程/DLL
上一篇:菜鳥求問一個資料調取的問題
下一篇:opengl紋理上繪制圖形
