如何实现按键随时终止像素循环?当前仅最后一帧后生效
问题描述
在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
相关产品推荐
相关产品推荐

