【发布时间】:2021-04-27 10:25:57
【问题描述】:
我想实现一个从外部设备接收消息的 GUI。 “advancedReceiveExample”正在等待消息。一旦它收到一个,它就会处理它,保存它并终止。
只要按钮被切换,我想让我的函数在收到新消息后等待新消息。
到目前为止我已经尝试过了:
void MainWindow::on_pushButton_clicked()
{
if (ui.pushButton->isChecked()) {
ui.pushButton->setText("Stop Receiving");
ui.label_3->setText("Receiving...");
advancedReceiveExample(ui.comboBox->currentIndex() + 1);
}
else
{
ui.pushButton->setText("Start Receiving");
ui.label_3->setText("Not Receiving");
}
}
这工作得很好,但如上所述,它只收到一条消息。如果我这样做:
void MainWindow::on_pushButton_clicked()
{
if (ui.pushButton->isChecked()) {
ui.pushButton->setText("Stop Receiving");
ui.label_3->setText("Receiving...");
while (1)
{
advancedReceiveExample(ui.comboBox->currentIndex() + 1);
}
}
else
{
ui.pushButton->setText("Start Receiving");
ui.label_3->setText("Not Receiving");
}
}
它阻塞了该函数,因为只有在函数“on_pushButton_clicked()”终止后才能更改按钮的状态。
Visual Studio 2019 C/C++
编辑:好的,我已经理解了阻塞线程的问题。多线程可能是正确的选择,但我对这个主题非常缺乏经验。 <QThread> 是可能的。你会怎么用呢?
您有什么建议可以使用其他库吗?
【问题讨论】:
-
如果您不想阻塞 UI 线程,那么您需要在单独的线程上运行消息泵。
-
我假设您想使用
pressed和released信号,而不是clicked。
标签: c++ multithreading qt user-interface toggle