C ++:GetAsyncKeyState()没有立即注册按键

时间:2017-08-04 02:04:23

标签: c++ sleep keypress getasync

在我点击'escape'键的程序中,我希望它立即注册,即使在睡眠期间也是如此。目前,在注册按键之前,它会一直等到睡眠声明结束。睡眠时间对程序很重要,因此不仅仅是添加暂停和等待用户输入。

<input id="input" placeholder="foo" />

编辑:澄清一下,睡眠的原因是我在一段时间间隔内重复执行动作。

1 个答案:

答案 0 :(得分:1)

您可以检查是否通过了10秒,而不是在10秒钟内休眠,并执行此时需要完成的任何操作。这样循环就会不断检查按键。

#include <chrono>
...
auto time_between_work_periods = std::chrono::seconds(10);
auto next_work_period = std::chrono::steady_clock::now() + time_between_work_periods;

while (!ESCAPE) {
    // Stop program when Escape is pressed
    if (GetAsyncKeyState(VK_ESCAPE)) {
        std::cout << "Exit triggered" << std::endl;
        ESCAPE = true;
        break;
    }

    if (std::chrono::steady_clock::now() > next_work_period) {
        // do some work
        next_work_period += time_between_work_periods;
    }
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
}