当我使用dolfin :: Mesh时,QProcess变成了僵尸

时间:2013-12-23 01:49:20

标签: c++ qt mesh qprocess

我有一个使用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 我怎样才能使它发挥作用?

0 个答案:

没有答案