SBC6845 内 [図のように /ftest 内] に配置された C++ 実行可能ファイルを実行しようとしています。現在、これらの実行可能ファイルは
while(1){
// around 250-300 lines of code here
}
無限ループ。ターミナルからコードのみを実行すると、いつでもそれらを殺すことができます。しかし、GUI 内から実行中にそれらを殺すことはできません。これらのコードを Qprocess で次のように実行します。
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");
}
ここでの問題は、pushbuttonまたはpushbutton_2 ievcm_test()
またはoffloader_test()
が呼び出されると、GUI が応答しなくなることです。GUI は /ftest のコードが終了するのを待ち続けるため、quit オプションが機能せず、ターミナルから再度終了する必要があります。また、ターミナルを終了すると、コードと GUI の両方が閉じます。
私は解決策を検索してみましたが、スレッドも使用しました。しかし、プッシュボタンからスレッドを開始すると、セグメンテーション エラーが発生します。
実行中にプロセスを終了できるようにする必要があります (このコードの変更または新しいアイデアは大歓迎です)。私は初心者なので、私のコーディングスキルの低さは無視してください。ありがとう。