【问题标题】:Does SetTimer function runs in background or goes to sleep?SetTimer 函数是在后台运行还是进入睡眠状态?
【发布时间】:2023-03-18 19:36:01
【问题描述】:

在我的一个项目中,我需要有效地安排不同的操作一遍又一遍地执行,每个操作都有自己的时间间隔。

我一直在想,当我使用SetTimer 函数时,后台会发生什么?

是否创建了新线程? 它会在后台运行并吃掉我的 CPU 吗?或者它会一直休眠到操作系统唤醒它的时间到来? 拥有大量计时器是否可行,或者是否有充分的理由尝试尽量减少它们的数量?

谢谢。

【问题讨论】:

  • SetTimer 不会创建新线程。会发生什么取决于您是否使用 timerproc(最后一个参数)。
  • 您能否进一步解释或将我们好奇的程序员重定向到某个地方,并解释那里究竟发生了什么以及如何发生?
  • 那太宽泛了,包括操作系统调度、增量队列、计时器对象、Windows 消息队列、WM_TIMER 消息的组合等。有关更多详细信息,您应该咨询好的“Windows Internals”之一' 书。

标签: c++ multithreading winapi timer


【解决方案1】:

是否创建了新线程?

没有。

它会在后台运行并吃掉我的 CPU 吗?

不 - 试试看。设置计时器并检查任务管理器。

它会一直休眠直到操作系统唤醒它,时间到了?

是的。

是否可以拥有大量计时器,或者是否有充分的理由 尽量减少它们的数量?

在今天的系统中,很多计时器并不是一个巨大的开销,但你应该仔细考虑这样的要求..

【讨论】:

  • 值得注意:如果你指定一个TimerProc回调,它会在调用SetTimer的同一个线程上执行。这样做的结果是,您不需要保护在 TimerProc 中读取/写入的数据以防止并发访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多