windows中的WM_TIME是多线程吗,如何产生的?

liuling_8008 2011-10-22 11:21:00
1. windows中的WM_TIME是多线程吗,如何产生的?与时间片有区别吗?
2. c++中,如果不使用windows WM_TIME,如何定时做一些事情?
...全文
126 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2011-10-22
  • 打赏
  • 举报
回复
raw input thread定时把WM_TIMER放到你的线程的消息队列
while(1)
{
Sleep(1000);
...这样可以每秒钟定时做事
}
liuling_8008 2011-10-22
  • 打赏
  • 举报
回复
非常感谢Lactoferrin
Lactoferrin 2011-10-22
  • 打赏
  • 举报
回复

大致步骤:
raw input thread循环等待gptmrMaster
一次循环中,先计算这次循环和上次循环之间的时差并记录这次循环的时刻,遍历所有计时器,每个计时器剩余时间减少那个时差,如果剩余时间小于0,给这个计时器的线程设置一个QS_TIMER的唤醒掩码,最后重新设置gptmrMaster,定时为所有计时器剩余时间最小的那个

当SetTimer的线程PeekMessage时,检查唤醒掩码是否有QS_TIMER,如果有则返回一个WM_TIMER消息
liuling_8008 2011-10-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lactoferrin 的回复:]
然后放到调用了SetTimer的线程的消息队列
csrss等待的是gptmrMaster,和CreateWaitableTimer创建出来的东西差不多,是一个轻量级的
[/Quote]

非常感谢,请问csrss是靠计数来产生的SetTimer消息吗,能详细的说说吗?
Lactoferrin 2011-10-22
  • 打赏
  • 举报
回复
然后放到调用了SetTimer的线程的消息队列
csrss等待的是gptmrMaster,和CreateWaitableTimer创建出来的东西差不多,是一个轻量级的
liuling_8008 2011-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lactoferrin 的回复:]
WM_TIME消息由csrss的一个线程产生
线程首次调用和消息相关的api时建立消息队列
[/Quote]

是csrss通过计时产生的,然后放到每个线程的消息队列中去?
W1nds 2011-10-22
  • 打赏
  • 举报
回复
顶一个
学习了
gameslq 2011-10-22
  • 打赏
  • 举报
回复
WM_TIME 不是多线程,WM_TIME消息和消息窗口在一个线程,系统内部以消息的形式来通知定时"到达“,和时间片差别大了,时间片是系统内调度的概念
定时可以是消息的,模拟的、回调的
1。基于消息的,比如WM_TIMER
2。模拟的
凡是具有超时功能的函数都可以用来模拟定时,不如sleep,WaitForSingleObject等
3。回调的
WM_TIME 也算一个,另外还有SetWaitableTimer等
4。硬件层级的
向立天 2011-10-22
  • 打赏
  • 举报
回复
不是多线程
和时间片也是不同领域的概念
如果不用始终消息可以通过定时器内核对象来实现
参考
http://wenku.baidu.com/view/e0cd413567ec102de2bd8994.html
Lactoferrin 2011-10-22
  • 打赏
  • 举报
回复
WM_TIME消息由csrss的一个线程产生
线程首次调用和消息相关的api时建立消息队列
liuling_8008 2011-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wltg2001 的回复:]
1. windows中的WM_TIME是多线程吗,如何产生的?与时间片有区别吗?
=============
一个消息而已,定时由系统发送的消息,不是多线程。
[/Quote]

谢谢,可以再详细的讲讲吗。
系统是如何定时产生的WM_TIME消息?每个线程有一个消息队列吗?
wltg2001 2011-10-22
  • 打赏
  • 举报
回复
1. windows中的WM_TIME是多线程吗,如何产生的?与时间片有区别吗?
=============
一个消息而已,定时由系统发送的消息,不是多线程。
cczlp 2011-10-22
  • 打赏
  • 举报
回复
WM_TIME不是多线程, 只是一个定时产生的消息.
可以用线程实现定时

15,471

社区成员

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

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