我有一个使用Qt4和FEniCS的代码。这是一个例子:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <dolfin.h>
#include <QDebug>
#include <QThread>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//dolfin::Mesh mesh;
process = new QProcess();
connect(process, SIGNAL(finished(int)), this, SLOT(processFinished()));
process->start("ls");
}
void MainWindow::processFinished()
{
qDebug() << "Process finished";
}
这是一个带有一个QPushButton的简单窗口。当我按下按钮时,它将启动“ls”命令,当它完成时(捕获终止信号),它会写入“Process finished”消息。但是当我取消注释时:
dolfin::Mesh mesh;
QProcess'es信号“finished()”永远不会发出,并且进程“ls”变成僵尸:
vitek@greyfox:~$ ps aux | grep "\[ls"
vitek 15357 0.0 0.0 0 0 ? Z 11:46 0:00 [ls] <defunct>
vitek 15371 0.0 0.0 5620 836 pts/1 S+ 11:47 0:00 grep --color=auto \[ls
所以,我认为dolfin :: Mesh或库libdolfin.so以某种方式窃取终止信号或阻止它。 dolfin :: Mesh类源代码在这里https://github.com/FEniCS/dolfin/blob/master/dolfin/mesh/Mesh.cpp 我怎样才能使它发挥作用?