c++ - 在等待用户输入时避免无限循环?

标签 c++ qt infinite-loop

我陷入了一个合乎逻辑的第 22 条军规。让我澄清一下我想做什么:按下按钮将触发电机移动,直到感觉到传感器(向我的 Rpi GPIO 发送 3.3V),此时它将反转方向。这一切都很好;问题是,它陷入了无限循环,所以如果我想按另一个按钮,例如提高速度,或者在运行过程中停止,嗯,我不能。 我曾尝试将“wiringPiISR()”实现为中断,但这似乎也在循环中以使用react。

请记住,以下只是一项测试,目的是让某些东西正常工作,以适应更大的代码段。

#include <libraries>


using namespace std;


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->label->setText("Nothing");
}

MainWindow::~MainWindow()
{
    delete ui;

}

void myInterruptLEFT(void)
{
    qDebug() << "SENSOR HIT";
}


void mainip(void)//this doesn't currently do anything.
{
     wiringPiISR(24,INT_EDGE_RISING,&myInterruptLEFT);

}
void MainWindow::on_pushButton_clicked()
{

qDebug() << "Loop Exited";

}

void MainWindow::on_checkBox_clicked(bool checked)
{   int i = 0;
    wiringPiSetupGpio();
    while((checked =! 0))
    {
       ui->label->setNum(i);
       i++;
    }

}

再一次,我只是想要一些方法让这个程序不断检查“24,INT_EDGE_RISING”......对于那些不熟悉的人来说,这意味着有一些电压被传递到第 24 个 GPIO 引脚(从低电压上升到高电压)......而不会完全被这样做迷住。背景循环,或者我真的不知道,这就是我来这里的原因。任何想法将不胜感激!

最佳答案

我不确定我是否完全理解你的问题,但也许你可以建立一个只有一个循环的状态机来检查所有按钮按下并执行所有必要的操作,即你的 on_checkBox_clicked 会只需设置一个标志,然后在主循环中检查该标志。像这样的东西(伪代码):

void MainWindow::on_checkBox_clicked(bool checked) {
    checkBox_wasClicked = true;
}

for (;;) {
    if (checkBox_wasClicked) {
          state = move_motor;
          checkBox_wasClicked = false;
    } else if (motor_reached_end) {
          state = move_motor_reverse;
          motor_reched_end = false;
    } else if ( /*... more transitions ... */ ){
    }

    if ( state == motor_move ) {
         i++;
    }
    /* .... more stuff ... */
}

通过这种方式,没有状态会阻止新按钮按下或其他转换的到来。

关于c++ - 在等待用户输入时避免无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38740702/

相关文章:

c++ - std::bind 类内部的静态成员函数

c++ - Matlab 上的编码器到 C++、sym 和 perms 函数?

c++ - 使用默认构造函数调用的网格类不工作 OpenGL C++

c++ - 是否可以在自定义 QGraphicsWidget 中嵌入 QWidget?

qt - 设置 QMainWindow 中央小部件的背景

c++ - 在 Linux 中编译基本 QtWidgets 应用程序时出现 QtCreator 问题

javascript - 如何以编程方式识别和终止无限循环中的 JavaScript?

qt - 如何在 QWidget 中绘制简单的水平线?

Java - 带 float 的无限循环

java - 通过java中的反射调用具有无限循环的方法