【问题标题】:How can I delay a function without freezing the thread using C++如何在不使用 C++ 冻结线程的情况下延迟函数
【发布时间】:2019-04-25 20:41:19
【问题描述】:

我正在尝试使用 C++ 延迟右键单击,

我现在有

if (GetKeyState(VK_LBUTTON) > 0) {
delay(120);
}

它工作正常,但在执行程序时冻结。 有没有办法让它延迟点击但不冻结程序?。

【问题讨论】:

  • 在事件循环中使用thread 或计时器?
  • 你需要把它放在不同的线程中
  • 谢谢,能举个例子吗?
  • 我不能举一个我认为你可以安全使用的例子。虽然线程可能是正确的方法,但它打开了一大堆您需要注意的其他事情,可能最重要的是 UI 线程和工作线程之间的数据同步。如果你可以用一个更好的例子来更新你的问题,那么有人可以使用线程或更适合你的问题的方法提供一个适用的例子,例如缩短延迟、循环它和调用一个函数。处理UI永远不会延迟很长时间的事件循环。
  • 这个问题的答案很大程度上取决于delay(120); 语句应该实现什么,以及它要在哪里执行。两者都不能从问题中推断出来。

标签: c++ winapi


【解决方案1】:

如果您想在某个动作发生时延迟,那么您应该为它设置一个计时器。你的程序不应该只是delay,因为它仍然需要在这段时间内处理鼠标事件和图形。通过设置一个计时器,该动作将在适当的时间发生,而不会冻结程序的其余部分。

这是关于使用计时器的微软指南:https://docs.microsoft.com/en-us/windows/desktop/winmsg/using-timers

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2021-12-21
    相关资源
    最近更新 更多