0

我正在尝试运行放置在 SBC6845 [在 /ftest 中,如图所示] 内的 C++ 可执行文件。现在这些可执行文件正在运行

while(1){
// around 250-300 lines of code here
}

无限循环。现在,当我只从终端运行代码时,我可以随时杀死它们。但是我无法在从 gui 内部运行时杀死它们。我使用 Qpr​​ocess 执行这些代码,如下所示:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow){
ui->setupUi(this);

connect(ui->pushButton, SIGNAL(pressed()), SLOT(vcm_test()));
connect(ui->pushButton_2, SIGNAL(pressed()), SLOT(offloader_test()));
connect(ui->pushButton_3, SIGNAL(pressed()), SLOT(quit_vcm()));
connect(ui->pushButton_4, SIGNAL(pressed()), SLOT(quit_offloader()));}
void MainWindow::vcm_test(){
   QProcess::execute("/ftest/vcm_test_2 \r\n");
}
void MainWindow::offloader_test(){
    QProcess::execute("/ftest/off_test_2 \r\n");
}  
void MainWindow::quit_vcm(){
    QProcess::execute("\x001a \r\n");
} 
void MainWindow::quit_offloader(){
    QProcess::execute("\x001a \r\n");   
}

现在的问题是当pushbuttonpushbutton_2vcm_test()或被offloader_test()调用时,gui 变得无响应。由于 gui 一直在等待 /ftest 中的代码完成退出选项不起作用,我必须再次从终端退出。从终端退出也会关闭代码和 gui。

我也尝试过搜索解决方案并使用过线程。但是从按钮启动线程时出现分段错误。

我需要能够在执行过程中退出该过程(非常感谢修改此代码或任何新想法)。我是新手,所以请忽略我糟糕的编码技能。谢谢。

4

2 回答 2

2

QProcess::execute(..)等待进程完成,这就是你的 GUI 冻结的原因。改用QProcess::start(..)。要退出进程,请使用QProcess::close()函数

尝试这个:

QProcess *myProcess = new QProcess(this);
myProcess->start("/ftest/vcm_test_2");

当你想关闭进程时:

myProcess->close();

您还可以将按钮的单击信号连接到进程的终止槽:

connect(ui->pushButton_3, SIGNAL(clicked()), myProcess, SLOT(kill());
于 2013-05-10T10:21:34.663 回答
0

您可以创建一个 QProcess 对象并在其上调用 start() 。这样,当您执行该过程时,代码不会被阻塞,直到它完成。

QProcess* myprocess=new QProcess();
myprocess->start("/ftest/vcm_test_2");

如果您想从 myprocess 获取信号以了解该过程是否已完成,则可以。在您的情况下,这没有用。您也可以通过调用来关闭进程

myprocess->close();

希望有帮助。

于 2013-05-10T10:16:14.840 回答