【问题标题】:C++ windows pause timerC++ 窗口暂停计时器
【发布时间】:2011-09-28 09:47:52
【问题描述】:

我正在使用SetTimer 在我的应用程序中创建一个间隔为 50 毫秒的计时器,该计时器将用于绘制一个对象并移动它。

现在我不希望对象在窗口失焦时移动,但我仍然需要绘制它。 让它每 50 毫秒绘制一次,似乎没有必要。在这个项目中,性能非常重要。

所以我需要一种方法来暂停计时器,但仍然绘制对象,但最好只在需要时。

【问题讨论】:

    标签: c++ c windows timer


    【解决方案1】:

    当你得到 WM_ACTIVATE 后,决定是调用 KillTimer 还是 SetTimer。

    【讨论】:

    • 但是如果计时器没有运行,对象将不会被绘制。我可以将它们放在WM_PAINT 中,然后从计时器调用WM_PAINT,但调用WM_PAINT 似乎通常会影响性能?
    • 好吧,下定决心。如果您让 WM_ACTIVATE 告诉您您不再活跃,那么接下来应该发生什么? +1。
    • 我希望对象仍然被绘制,但仅在必要时,如果窗口失焦。但如果它在焦点上,则每 50 毫秒正常绘制一次。
    • 你可以两者都做 - 当你专注时在计时器中绘画,但总是响应 WM_PAINT 并在被要求时绘画所有内容。无论如何,您都必须这样做才能成为一个表现良好的应用程序。
    • 您应该在 WM_PAINT 中完成所有绘画,并让您的计时器在包含对象的窗口部分执行 InvalidateRect。
    【解决方案2】:

    只是对您最初的问题的说明。
    我不会依赖分辨率如此低的 Windows Timer。这是一条低优先级的消息,如果您的程序中有很多繁重的事情正在发生,那么计时器可能会以您期望的更高间隔被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2021-08-31
      • 1970-01-01
      • 2016-07-25
      • 2014-04-17
      相关资源
      最近更新 更多