首页 > 解决方案 > 有没有更好的方法在循环中只运行一次动作?

问题描述

我在这里有一个while循环,当按下一个键时,我正在运行一个名为“action”的方法。

我需要知道是否有一种不那么混乱的方法。

这是我当前的代码:

bool actionRun = false;
bool keyPress = someCodeForKeyPress;

while(true) {
    if(keyPress) {
        if(!actionRun) {
            action();
            actionRun = true;
        }
    } else {
        actionRun = false;
    }
}

在这种情况下,这是多余的,但通常我想要这样做的原因是在主线程正在处理关键事件时让它在另一个线程上进行。

有没有一种解决方案?

标签: c++

解决方案


(我假设您提供的代码片段在按下键时运行,并且您真的不希望循环永远运行。)

有一个单行:std::call_once,它也是线程安全的(您的代码容易受到bool控制变量上的数据竞争的影响):

请参阅https://en.cppreference.com/w/cpp/thread/call_once


推荐阅读