You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现按键随时终止像素循环?当前仅最后一帧后生效

问题描述

在main函数中运行像素循环,期望按下按键时像素停止运行,但目前仅在最后一个像素执行完成后按键才生效。尝试将条件判断的if改为while循环,问题仍未解决。相关代码如下:

int main() {
    while(1) {
        update();
        frames();
    }
}

void update() {
    if (button_pressed) {
        buttonPresses = !buttonPresses;
    }
}

void frames() {
    if (buttonPresses == 1) {
        pixel1();
        pixel2();
        pixel3();
    }
}

请问如何修改才能实现按下按键时随时终止循环?

解决方案

问题出在frames()里的三个像素函数是连续执行的,期间完全没检查按键状态,所以按键只能等这三个函数全跑完才会被响应。要实现随时终止,必须在每个像素操作后立刻检查按键开关状态,一旦buttonPresses被置为0,就停止后续操作。

修改后的代码示例:

// 注意:button_pressed需要声明为volatile,避免编译器优化导致状态不更新
volatile int button_pressed = 0;
int buttonPresses = 0;

int main() {
    while(1) {
        update();
        frames();
    }
}

void update() {
    if (button_pressed) {
        buttonPresses = !buttonPresses;
        // 重置按键标志,防止重复触发
        button_pressed = 0;
    }
}

void frames() {
    if (buttonPresses != 1) return;
    
    pixel1();
    if (buttonPresses != 1) return;
    
    pixel2();
    if (buttonPresses != 1) return;
    
    pixel3();
}

如果pixel1()、pixel2()这类函数本身执行时间很长(比如内部有循环),那还要在这些函数内部也加入buttonPresses的检查,比如每执行一轮循环就判断一次,这样响应会更及时。

内容的提问来源于stack exchange,提问作者javi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:38:26