SetTimer生成的定时器是同步调用,还是异步调用?

pgmsoul 2009-10-18 09:04:28
发现主线程被挂起之后,Timer也被挂起了,怀疑是同步调用回调函数。
...全文
631 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pgmsoul 2009-10-21
  • 打赏
  • 举报
回复
这样比设置个Timer还简单,还有SetTimer,KillTimer的。还有设置回调,看来不要老跟着微软的思路走。
还有那个SetWaitTimer那个回调函数完全是多余的,在自己的线程里调用代码就行了。
pgmsoul 2009-10-21
  • 打赏
  • 举报
回复
Timer在多线程下,确实是不可用的。它所在的线程阻塞,就完蛋了。

于是生成个线程,然后while循环,调用sleep(100),相当于100ms的定时器。
butwang 2009-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pgmsoul 的回复:]
刚才看了一下SetWaitTimer的内核定时器,它实际上需要启动一个线程,而且它的准确度也是10ms级别的,不知道是世界函数本身不准,资料说可以准确到ms级。

实际上生成一个线程,然后用Sleep定时挂起,就是一个定时器呀。
[/Quote]

可以精确到毫秒级,SetWaitTimer内部用的是线程的APC队列,APC队列比线程的消息队列权限高,但是线程必须处在"警告"的状态下,
pgmsoul 2009-10-18
  • 打赏
  • 举报
回复
刚才看了一下SetWaitTimer的内核定时器,它实际上需要启动一个线程,而且它的准确度也是10ms级别的,不知道是世界函数本身不准,资料说可以准确到ms级。

实际上生成一个线程,然后用Sleep定时挂起,就是一个定时器呀。
huqinglu123 2009-10-18
  • 打赏
  • 举报
回复
我记得是同步的,只是SetTimer有延迟的情况,不是理想中的那样准确
老邓 2009-10-18
  • 打赏
  • 举报
回复
同步,存在消息阻塞,不准确。
建议用内核计时器。
pgmsoul 2009-10-18
  • 打赏
  • 举报
回复
不是基于消息,hwnd传0,设置了回调函数。
butwang 2009-10-18
  • 打赏
  • 举报
回复
如果是基于消息的定时器的话(SetTimer最后一个参数为0),主线程被阻塞了,那消息循环肯定不能运行了,定时器肯定不起作用了,

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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