线程会影响定时器吗

????24 2016-12-10 11:49:18
我用定时器用来显示当前时间,然后建立一个线程也显示时间。运行程序后,定时器显示的时间正常。但是,按下按钮建立线程之后,定时器的时间刷新的很慢,有时候三四秒才变化一次。这是为什么啊。
...全文
902 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿源是少年 2016-12-12
  • 打赏
  • 举报
回复
WM_TIMER优先级很低,如果你的程序在平凡的做绘制或者产生了很多其他的优先级高于它的消息,那么它的处理就会变得很慢,再一个,定时器本身受CPU的影响比较大,如果CPU负载很高,WM_TIMER的产生的时间差也会不准,如果你用来做模拟时钟,那么建议你的SetTimer的超时时间设置短一些,然后在WM_TIMER的处理函数里面用实际时间差来作为刷新的依据: 比如的SetTimer超时设为100ms,每次OnTimer回掉时都判断当前时间和上一次时间的差是否>1000ms,然后决定是否刷新:
VOID GetLocalTime(  LPSYSTEMTIME lpSystemTime   // system time);
xiaohuh421 2016-12-12
  • 打赏
  • 举报
回复
线程太占CPU也同样会导致消息线程变卡, 更新慢也就正常了. 或者你线程中POST到UI线程的消息非常多(可能你线程中会发送SET_WINDOWTEXT消息,设置文本信息), 这样低优先级的WM_TIMER消息就不容易得到响应的机会.
Eleven 2016-12-12
  • 打赏
  • 举报
回复
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.
zgl7903 2016-12-12
  • 打赏
  • 举报
回复
线程里适当的 Sleep, WM_TIMER 只要消息队列中有消息 就不会被派发, 因此线程中发送消息到消息队列的话会影响定时器
  • 打赏
  • 举报
回复
Timer优先级很低的
赵4老师 2016-12-12
  • 打赏
  • 举报
回复
综上所述,会。
一步一光年 2016-12-11
  • 打赏
  • 举报
回复
定时器消息的优先级别很低的, 精度也不是很高, 适合对精度要求不高的情况, 精度要求高的情况推荐多线程
????24 2016-12-11
  • 打赏
  • 举报
回复
没人啊

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧