7

Qtでシェルスクリプトを起動したい。

QProcess process;
process.start(commandLine, QStringList() << confFile);
process.waitForFinished();

if(process.exitCode()!=0)
{
    qDebug () << " Error " << process.exitCode() << process.readAllStrandardError();
}
else
{
    qDebug () << " Ok " << process.readAllStrandardOutput() << process.readAllStrandardError();
}

結果は次のとおりです。

Ok : 結果.... " "" QProcess : プロセスの実行中に破棄されました。

このメッセージは毎回表示されるわけではありません。

何が問題ですか?

4

2 に答える 2

17

process.waitForFinished();デフォルトの 30 秒のタイムアウトに達しています。process.waitForFinished(-1);代わりに使用してください。これにより、タイムアウトなしで、プロセスが完了するまでにどれだけ時間がかかるかを確認できます。

于 2013-01-24T16:08:01.697 に答える
3

QProcess をローカル スコープに作成することに注意してください。これは、スコープを終了するとオブジェクトが削除されることを意味します。デストラクタで QProcess プロセスが終了します。デストラクタでプロセスが終了すると、「プロセスはまだ実行中です」というメッセージが「Destroyed」になります。

この問題を解決するには、プロセスが既に終了しているときに QProcess デストラクタを呼び出す必要があります。

あなたの例に QProcess::waitForFinished(-1) になる場合、それは発生しますが、これはアプリケーションをブロックします。

于 2013-01-24T17:09:10.583 に答える