diff options
author | Ken Moore <moorekou@gmail.com> | 2015-10-28 08:21:19 -0400 |
---|---|---|
committer | Ken Moore <moorekou@gmail.com> | 2015-10-28 08:21:19 -0400 |
commit | eebcb9b10e97ed2241bb1792e7b3ec54b6b3e94e (patch) | |
tree | 6205143259a380159c50552731106f32fe845df0 /libLumina/LuminaUtils.cpp | |
parent | Remove the "waitForStarted()" function call in the external process launcher ... (diff) | |
download | lumina-eebcb9b10e97ed2241bb1792e7b3ec54b6b3e94e.tar.gz lumina-eebcb9b10e97ed2241bb1792e7b3ec54b6b3e94e.tar.bz2 lumina-eebcb9b10e97ed2241bb1792e7b3ec54b6b3e94e.zip |
Ok, now the external process commands *truly* run in a separate thread through the QtConcurrent module.
Diffstat (limited to 'libLumina/LuminaUtils.cpp')
-rw-r--r-- | libLumina/LuminaUtils.cpp | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/libLumina/LuminaUtils.cpp b/libLumina/LuminaUtils.cpp index 987e3c5d..4bcc548a 100644 --- a/libLumina/LuminaUtils.cpp +++ b/libLumina/LuminaUtils.cpp @@ -15,21 +15,45 @@ #include <QDesktopWidget> #include <QImageReader> #include <QRegExp> +#include <QFuture> +#include <QtConcurrent> #include <LuminaOS.h> #include <LuminaThemes.h> #include <LuminaXDG.h> static QStringList fav; + +inline QStringList ProcessRun(QString cmd, QStringList args){ + //Assemble outputs + QStringList out; out << "1" << ""; //error code, string output + QProcess proc; + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LANG", "C"); + env.insert("LC_MESSAGES", "C"); + proc.setProcessEnvironment(env); + proc.setProcessChannelMode(QProcess::MergedChannels); + if(args.isEmpty()){ + proc.start(cmd); + }else{ + proc.start(cmd,args); + } + while(!proc.waitForFinished(500)){ + if(proc.state() == QProcess::NotRunning){ break; } //somehow missed the finished signal + } + out[0] = QString::number(proc.exitCode()); + out[1] = QString(proc.readAllStandardOutput()); + return out; +} //============= // LUtils Functions //============= QString LUtils::LuminaDesktopVersion(){ - return "0.8.7-Release"; + return "0.8.8-devel"; } int LUtils::runCmd(QString cmd, QStringList args){ - QProcess proc; + /*QProcess proc; proc.setProcessChannelMode(QProcess::MergedChannels); if(args.isEmpty()){ proc.start(cmd); @@ -42,12 +66,14 @@ int LUtils::runCmd(QString cmd, QStringList args){ QCoreApplication::processEvents(); } int ret = proc.exitCode(); - return ret; + return ret;*/ + QFuture<QStringList> future = QtConcurrent::run(ProcessRun, cmd, args); + return future.result()[0].toInt(); //turn it back into an integer return code } QStringList LUtils::getCmdOutput(QString cmd, QStringList args){ - QProcess proc; + /*QProcess proc; QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("LANG", "C"); env.insert("LC_MESSAGES", "C"); @@ -60,11 +86,13 @@ QStringList LUtils::getCmdOutput(QString cmd, QStringList args){ } //if(!proc.waitForStarted(30000)){ return QStringList(); } //process never started - max wait of 30 seconds while(!proc.waitForFinished(300)){ - if(proc.state() != QProcess::NotRunning){ break; } //somehow missed the finished signal + if(proc.state() == QProcess::NotRunning){ break; } //somehow missed the finished signal QCoreApplication::processEvents(); } QStringList out = QString(proc.readAllStandardOutput()).split("\n"); - return out; + return out;*/ + QFuture<QStringList> future = QtConcurrent::run(ProcessRun, cmd, args); + return future.result()[1].split("\n"); //Split the return message into lines } QStringList LUtils::readFile(QString filepath){ |