线程会影响定时器吗

时间:2020-12-09 23:31:46
我用定时器用来显示当前时间,然后建立一个线程也显示时间。运行程序后,定时器显示的时间正常。但是,按下按钮建立线程之后,定时器的时间刷新的很慢,有时候三四秒才变化一次。这是为什么啊。

8 个解决方案

#1


线程会影响定时器吗  没人啊

#2


定时器消息的优先级别很低的, 精度也不是很高, 适合对精度要求不高的情况, 精度要求高的情况推荐多线程

#3


WM_TIMER优先级很低,如果你的程序在平凡的做绘制或者产生了很多其他的优先级高于它的消息,那么它的处理就会变得很慢,再一个,定时器本身受CPU的影响比较大,如果CPU负载很高,WM_TIMER的产生的时间差也会不准,如果你用来做模拟时钟,那么建议你的SetTimer的超时时间设置短一些,然后在WM_TIMER的处理函数里面用实际时间差来作为刷新的依据:

比如的SetTimer超时设为100ms,每次OnTimer回掉时都判断当前时间和上一次时间的差是否>1000ms,然后决定是否刷新:

VOID GetLocalTime(  LPSYSTEMTIME lpSystemTime   // system time);

#4


Timer优先级很低的

#5


线程里适当的 Sleep,
WM_TIMER 只要消息队列中有消息 就不会被派发, 因此线程中发送消息到消息队列的话会影响定时器

#6


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.

#7


线程太占CPU也同样会导致消息线程变卡, 更新慢也就正常了.
或者你线程中POST到UI线程的消息非常多(可能你线程中会发送SET_WINDOWTEXT消息,设置文本信息), 这样低优先级的WM_TIMER消息就不容易得到响应的机会.

#8


综上所述,会。 线程会影响定时器吗

#1


线程会影响定时器吗  没人啊

#2


定时器消息的优先级别很低的, 精度也不是很高, 适合对精度要求不高的情况, 精度要求高的情况推荐多线程

#3


WM_TIMER优先级很低,如果你的程序在平凡的做绘制或者产生了很多其他的优先级高于它的消息,那么它的处理就会变得很慢,再一个,定时器本身受CPU的影响比较大,如果CPU负载很高,WM_TIMER的产生的时间差也会不准,如果你用来做模拟时钟,那么建议你的SetTimer的超时时间设置短一些,然后在WM_TIMER的处理函数里面用实际时间差来作为刷新的依据:

比如的SetTimer超时设为100ms,每次OnTimer回掉时都判断当前时间和上一次时间的差是否>1000ms,然后决定是否刷新:

VOID GetLocalTime(  LPSYSTEMTIME lpSystemTime   // system time);

#4


Timer优先级很低的

#5


线程里适当的 Sleep,
WM_TIMER 只要消息队列中有消息 就不会被派发, 因此线程中发送消息到消息队列的话会影响定时器

#6


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.

#7


线程太占CPU也同样会导致消息线程变卡, 更新慢也就正常了.
或者你线程中POST到UI线程的消息非常多(可能你线程中会发送SET_WINDOWTEXT消息,设置文本信息), 这样低优先级的WM_TIMER消息就不容易得到响应的机会.

#8


综上所述,会。 线程会影响定时器吗