本文整理汇总了C++中QProcess::waitForReadyRead方法的典型用法代码示例。如果您正苦于以下问题:C++ QProcess::waitForReadyRead方法的具体用法?C++ QProcess::waitForReadyRead怎么用?C++ QProcess::waitForReadyRead使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QProcess
的用法示例。
在下文中一共展示了QProcess::waitForReadyRead方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: InsertNewInstructions
void qtDLGAssembler::InsertNewInstructions()
{
if(lineEdit->text().length() <= 0)
{
close();
return;
}
QMap<quint64,DisAsDataRow>::const_iterator i = m_pCurrentDisassembler->SectionDisAs.constFind(m_instructionOffset);
if(i == m_pCurrentDisassembler->SectionDisAs.constEnd())
{
close();
return;
}
QString oldOpcodes = i.value().OpCodes;
DWORD oldOpcodeLen = oldOpcodes.replace(" ", "").length() / 2,
newOpcodeLen = NULL;
QFile tempOutput("nanomite.asm");
tempOutput.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream out(&tempOutput);
if(m_is64Bit)
out << "BITS 64\n";
else
out << "BITS 32\n";
out << "org 0x" << hex << i.value().Offset << "\r\n";
out << lineEdit->text();
tempOutput.close();
QProcess nasm;
nasm.setReadChannel(QProcess::StandardOutput);
nasm.setProcessChannelMode(QProcess::MergedChannels);
nasm.start("nasm.exe -o nanomite.bin nanomite.asm");
if (!nasm.waitForStarted())
{
QMessageBox::critical(this, "Nanomite", "Unable to launch assembler!", QMessageBox::Ok, QMessageBox::Ok);
close();
return;
}
while(nasm.state() != QProcess::NotRunning)
{
nasm.waitForReadyRead();
QString errorMessage = nasm.readAll();
if(errorMessage.contains("nanomite.asm:3:"))
{
errorMessage.replace("nanomite.asm:3:","");
QMessageBox::critical(this, "Nanomite", errorMessage, QMessageBox::Ok, QMessageBox::Ok);
lineEdit->clear();
return;
}
}
DeleteFile(L"nanomite.asm");
HANDLE hFile = CreateFileW(L"nanomite.bin",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
lineEdit->clear();
return;
}
int iLen = GetFileSize(hFile,NULL);
LPVOID pFileBuffer = clsMemManager::CAlloc(iLen);
DWORD BytesRead = NULL;
if(!ReadFile(hFile,pFileBuffer,iLen,&BytesRead,NULL))
{
CloseHandle(hFile);
DeleteFile(L"nanomite.bin");
clsMemManager::CFree(pFileBuffer);
QMessageBox::critical(this,"Nanomite","no valid opcodes found!",QMessageBox::Ok,QMessageBox::Ok);
lineEdit->clear();
return;
}
CloseHandle(hFile);
DeleteFile(L"nanomite.bin");
if(BytesRead <= 0)
{
clsMemManager::CFree(pFileBuffer);
QMessageBox::critical(this,"Nanomite","no valid opcodes found!",QMessageBox::Ok,QMessageBox::Ok);
lineEdit->clear();
return;
}
if(oldOpcodeLen >= BytesRead)
newOpcodeLen = oldOpcodeLen;
else if(oldOpcodeLen < BytesRead)
{
newOpcodeLen = oldOpcodeLen;
while(newOpcodeLen < BytesRead)
{
++i;
if(i == m_pCurrentDisassembler->SectionDisAs.constEnd()) return;
oldOpcodes = i.value().OpCodes;
newOpcodeLen += oldOpcodes.replace(" ", "").length() / 2;
//.........这里部分代码省略.........
示例2: s
DiagnosticsDialog::DiagnosticsDialog( QWidget *parent )
: QDialog( parent )
{
setupUi( this );
setAttribute( Qt::WA_DeleteOnClose, true );
QString info;
QTextStream s( &info );
s << "<b>" << tr("Locale:") << "</b> ";
QString locale = QLocale::c().name();
s << (locale == "C" ? "en_us" : locale) << "<br /><br />";
#if defined(Q_OS_LINUX)
QString package = getPackageVersion( QStringList() << "estonianidcard", false );
QString utility = getPackageVersion( QStringList() << "qesteidutil", false );
if ( !package.isEmpty() )
s << "<b>" << tr("ID-card package version:") << "</b> " << package << "<br />";
if ( !utility.isEmpty() )
s << "<b>" << tr("ID-card utility version:") << "</b> " << utility << "<br />";
#else
s << "<b>" << tr("ID-card utility version:") << "</b> " << QCoreApplication::applicationVersion() << "<br />";
#endif
s << "<b>" << tr("OS:") << "</b> ";
#if defined(Q_OS_LINUX)
QProcess p;
p.start( "lsb_release", QStringList() << "-s" << "-d" );
p.waitForReadyRead();
s << p.readAll();
#elif defined(Q_OS_MAC)
SInt32 major, minor, bugfix;
if( Gestalt(gestaltSystemVersionMajor, &major) == noErr &&
Gestalt(gestaltSystemVersionMinor, &minor) == noErr &&
Gestalt(gestaltSystemVersionBugFix, &bugfix) == noErr )
s << "Mac OS " << major << "." << minor << "." << bugfix;
else
s << "Mac OS 10.3";
#endif
s << " (" << QSysInfo::WordSize << ")<br />";
#if defined(Q_OS_LINUX)
s << "<b>" << tr("CPU:") << "</b> " << getProcessor() << "<br /><br />";
#endif
s << "<b>" << tr("Library paths:") << "</b> " << QCoreApplication::libraryPaths().join( ";" ) << "<br />";
s << "<b>" << tr("Libraries") << ":</b><br />";
#if defined(Q_OS_MAC)
QProcess p;
p.start( "/Library/OpenSC/bin/opensc-tool", QStringList() << "-i" );
p.waitForReadyRead();
s << p.readAll() << "<br />";
#elif defined(Q_OS_LINUX)
s << getPackageVersion( QStringList() << "openssl" << "libpcsclite1" << "opensc" );
#endif
s << "QT (" << qVersion() << ")<br />" << "<br />";
s << "<b>" << tr("PCSC service status: ") << "</b>" << " " << (isPCSCRunning() ? tr("Running") : tr("Not running")) << "<br /><br />";
s << "<b>" << tr("Card readers") << ":</b><br />" << getReaderInfo() << "<br />";
QString browsers = getBrowsers();
if ( !browsers.isEmpty() )
s << "<b>" << tr("Browsers:") << "</b><br />" << browsers << "<br /><br />";
diagnosticsText->setHtml( info );
}
示例3: checkVersion
unsigned int AbstractTool::checkVersion(bool &modified)
{
if(m_preferences->getSkipVersionTest())
{
log("Warning: Skipping the version check this time!");
return makeRevision(0xFFF0, 0xFFF0);
}
QProcess process;
QList<QRegExp*> patterns;
QStringList cmdLine;
//Init encoder-specific values
checkVersion_init(patterns, cmdLine);
log("Creating process:");
if(!startProcess(process, getBinaryPath(), cmdLine))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
unsigned int revision = UINT_MAX;
unsigned int coreVers = UINT_MAX;
modified = false;
while(process.state() != QProcess::NotRunning)
{
if(*m_abort)
{
process.kill();
bAborted = true;
break;
}
if(!process.waitForReadyRead())
{
if(process.state() == QProcess::Running)
{
process.kill();
qWarning("process timed out <-- killing!");
log("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
}
PROCESS_PENDING_LINES(process, checkVersion_parseLine, patterns, coreVers, revision, modified);
}
if(!(bTimeout || bAborted))
{
PROCESS_PENDING_LINES(process, checkVersion_parseLine, patterns, coreVers, revision, modified);
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
while(!patterns.isEmpty())
{
QRegExp *pattern = patterns.takeFirst();
MUTILS_DELETE(pattern);
}
if(bTimeout || bAborted || (!checkVersion_succeeded(process.exitCode())))
{
if(!(bTimeout || bAborted))
{
log(tr("\nPROCESS EXITED WITH ERROR CODE: %1").arg(QString::number(process.exitCode())));
}
return UINT_MAX;
}
if((revision == UINT_MAX) || (coreVers == UINT_MAX))
{
log(tr("\nFAILED TO DETERMINE VERSION INFO !!!"));
return UINT_MAX;
}
return makeRevision(coreVers, revision);
}
示例4: QProcess
Device::Device()
{
#ifdef i386
m_model = EMULATOR;
return;
#endif
QStringList list;
QProcess *myProcess = new QProcess();
list << "-c" << "grep erial /proc/cpuinfo|cut -c12-15";
myProcess->start("/bin/sh", list);
if (myProcess->waitForReadyRead(10000)) {
QByteArray array = myProcess->readAll();
array.truncate(array.indexOf("\n"));
bool ok;
int sn = QString(array).toInt(&ok, 16);
if (ok) {
qDebug("serial: %X", sn);
} else {
qDebug("unexpected output");
return;
}
switch(sn) {
case 0xB002:
case 0xB003:
m_model = K2; // may not work as K2 doesn't print SN in cpuinfo
break;
case 0xB004:
case 0xB005:
case 0xB009:
m_model = KDX;
break;
case 0xB006:
case 0xB008:
case 0xB00A:
m_model = K3;
break;
case 0xB00E:
m_model = K4NT;
break;
case 0xB00F:
case 0xB010:
case 0xB011:
case 0xB012: // ???
m_model = KT;
break;
case 0x9023:
case 0xB023:
m_model = K4NTB;
break;
case 0xB01B:
case 0xB01C:
case 0xB01D:
case 0xB01F:
case 0xB024:
m_model = KPW;
break;
default:
qDebug("Unknown model: %X", sn);
}
}
myProcess->close();
}
示例5: regExp
bool MP3Decoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
args << "-v" << "--utf8" << "-w" << QDir::toNativeSeparators(outputFile);
args << QDir::toNativeSeparators(sourceFile);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
QRegExp regExp("\\s+Time:\\s+(\\d+):(\\d+)\\.(\\d+)\\s+\\[(\\d+):(\\d+)\\.(\\d+)\\],");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("mpg123 process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
int values[6];
for(int i = 0; i < 6; i++)
{
bool ok = false;
int temp = regExp.cap(i+1).toInt(&ok);
values[i] = (ok ? temp : 0);
}
int timeDone = (60 * values[0]) + values[1];
int timeLeft = (60 * values[3]) + values[4];
if(timeDone > 0 || timeLeft > 0)
{
int newProgress = qRound((static_cast<double>(timeDone) / static_cast<double>(timeDone + timeLeft)) * 100.0);
if(newProgress > prevProgress)
{
emit statusUpdated(newProgress);
prevProgress = qMin(newProgress + 2, 99);
}
}
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS)
{
return false;
}
return true;
}
示例6: decode
bool OpusDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
if(m_disableResampling)
{
args << "--no-resample";
}
args << QDir::toNativeSeparators(sourceFile);
args << QDir::toNativeSeparators(outputFile);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
QRegExp regExp("\\((\\d+)%\\)");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("opusdec process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok = false;
int progress = regExp.cap(1).toInt(&ok);
if(ok && (progress > prevProgress))
{
emit statusUpdated(progress);
prevProgress = qMin(progress + 2, 99);
}
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS)
{
return false;
}
return true;
}
示例7: decode
bool ALACDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
args << "--decode";
args << "-o" << QDir::toNativeSeparators(outputFile);
args << QDir::toNativeSeparators(sourceFile);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
//The ALAC Decoder doesn't actually send any status updates :-[
//emit statusUpdated(20 + (QUuid::createUuid().data1 % 60));
QRegExp regExp("\\[(\\d+)\\.(\\d)%\\]");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("ALAC process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok[2] = {false, false};
int intVal[2] = {0, 0};
intVal[0] = regExp.cap(1).toInt(&ok[0]);
intVal[1] = regExp.cap(2).toInt(&ok[1]);
if(ok[0] && ok[1])
{
int progress = qRound(static_cast<double>(intVal[0]) + (static_cast<double>(intVal[1]) / 10.0));
if(progress > prevProgress)
{
emit statusUpdated(progress);
prevProgress = qMin(progress + 2, 99);
}
}
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS || QFileInfo(outputFile).size() == 0)
{
return false;
}
return true;
}
示例8: encode
bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{
const QString qaac_bin = m_binary_qaac64.isEmpty() ? m_binary_qaac32 : m_binary_qaac64;
QProcess process;
QStringList args;
process.setWorkingDirectory(QFileInfo(outputFile).canonicalPath());
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("PATH", QDir::toNativeSeparators(QString("%1;%1/QTfiles;%2").arg(QDir(QCoreApplication::applicationDirPath()).canonicalPath(), MUtils::temp_folder())));
process.setProcessEnvironment(env);
if(m_configRCMode != SettingsModel::VBRMode)
{
switch(m_configProfile)
{
case 2:
case 3:
args << "--he"; //Forces use of HE AAC profile (there is no explicit HEv2 switch for QAAC)
break;
}
}
switch(m_configRCMode)
{
case SettingsModel::CBRMode:
args << "--cbr" << QString::number(qBound(8, index2bitrate(m_configBitrate), 576));
break;
case SettingsModel::ABRMode:
args << "--abr" << QString::number(qBound(8, index2bitrate(m_configBitrate), 576));
break;
case SettingsModel::VBRMode:
args << "--tvbr" << QString::number(g_qaacVBRQualityLUT[qBound(0, m_configBitrate , 14)]);
break;
default:
MUTILS_THROW("Bad rate-control mode!");
break;
}
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
if(!metaInfo.title().isEmpty()) args << "--title" << cleanTag(metaInfo.title());
if(!metaInfo.artist().isEmpty()) args << "--artist" << cleanTag(metaInfo.artist());
if(!metaInfo.album().isEmpty()) args << "--album" << cleanTag(metaInfo.album());
if(!metaInfo.genre().isEmpty()) args << "--genre" << cleanTag(metaInfo.genre());
if(!metaInfo.comment().isEmpty()) args << "--comment" << cleanTag( metaInfo.comment());
if(metaInfo.year()) args << "--date" << QString::number(metaInfo.year());
if(metaInfo.position()) args << "--track" << QString::number(metaInfo.position());
if(!metaInfo.cover().isEmpty()) args << "--artwork" << metaInfo.cover();
args << "-d" << ".";
args << "-o" << QDir::toNativeSeparators(outputFile);
args << QDir::toNativeSeparators(sourceFile);
if(!startProcess(process, qaac_bin, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
QRegExp regExp("\\[(\\d+)\\.(\\d)%\\]");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("QAAC process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok = false;
int progress = regExp.cap(1).toInt(&ok);
if(ok && (progress > prevProgress))
{
emit statusUpdated(progress);
prevProgress = qMin(progress + 2, 99);
}
}
else if(!text.isEmpty())
{
//.........这里部分代码省略.........
示例9: run
//.........这里部分代码省略.........
prog = QLatin1String("ssh");
}
/*
* Start the process.
*/
{
QDebug debug(QtDebugMsg);
debug << "Running:";
debug << prog;
foreach (const QString &argument, arguments) {
debug << argument;
}
}
QProcess process;
process.start(prog, arguments, QIODevice::ReadOnly);
if (!process.waitForStarted(-1)) {
emit finished(QLatin1String("Could not start process"));
return;
}
/*
* Process standard output
*/
ImageHash thumbnails;
QVariantMap parsedJson;
trace::Profile* profile = NULL;
process.setReadChannel(QProcess::StandardOutput);
if (process.waitForReadyRead(-1)) {
BlockingIODevice io(&process);
if (m_captureState) {
process.waitForFinished(-1);
QByteArray data = process.readAll();
QJsonParseError error;
QJsonDocument jsonDoc =
QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
//qDebug()<<"Error is "<<error.errorString();
msg = error.errorString();
}
parsedJson = jsonDoc.toVariant().toMap();
} else if (m_captureThumbnails) {
/*
* Parse concatenated PNM images from output.
*/
while (!io.atEnd()) {
image::PNMInfo info;
char header[512];
qint64 headerSize = 0;
int headerLines = 3; // assume no optional comment line
for (int headerLine = 0; headerLine < headerLines; ++headerLine) {
qint64 headerRead = io.readLine(&header[headerSize], sizeof(header) - headerSize);
// if header actually contains optional comment line, ...
if (headerLine == 1 && header[headerSize] == '#') {
++headerLines;
示例10: analyzeAvisynthFile
bool AnalyzeTask::analyzeAvisynthFile(const QString &filePath, AudioFileModel &info)
{
QProcess process;
lamexp_init_process(process, QFileInfo(m_avs2wavBin).absolutePath());
process.start(m_avs2wavBin, QStringList() << QDir::toNativeSeparators(filePath) << "?");
if(!process.waitForStarted())
{
qWarning("AVS2WAV process failed to create!");
qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData());
process.kill();
process.waitForFinished(-1);
return false;
}
bool bInfoHeaderFound = false;
while(process.state() != QProcess::NotRunning)
{
if(*m_abortFlag)
{
process.kill();
qWarning("Process was aborted on user request!");
break;
}
if(!process.waitForReadyRead())
{
if(process.state() == QProcess::Running)
{
qWarning("AVS2WAV time out. Killing process and skipping file!");
process.kill();
process.waitForFinished(-1);
return false;
}
}
QByteArray data;
while(process.canReadLine())
{
QString line = QString::fromUtf8(process.readLine().constData()).simplified();
if(!line.isEmpty())
{
int index = line.indexOf(':');
if(index > 0)
{
QString key = line.left(index).trimmed();
QString val = line.mid(index+1).trimmed();
if(bInfoHeaderFound && !key.isEmpty() && !val.isEmpty())
{
if(key.compare("TotalSeconds", Qt::CaseInsensitive) == 0)
{
bool ok = false;
unsigned int duration = val.toUInt(&ok);
if(ok) info.techInfo().setDuration(duration);
}
if(key.compare("SamplesPerSec", Qt::CaseInsensitive) == 0)
{
bool ok = false;
unsigned int samplerate = val.toUInt(&ok);
if(ok) info.techInfo().setAudioSamplerate (samplerate);
}
if(key.compare("Channels", Qt::CaseInsensitive) == 0)
{
bool ok = false;
unsigned int channels = val.toUInt(&ok);
if(ok) info.techInfo().setAudioChannels(channels);
}
if(key.compare("BitsPerSample", Qt::CaseInsensitive) == 0)
{
bool ok = false;
unsigned int bitdepth = val.toUInt(&ok);
if(ok) info.techInfo().setAudioBitdepth(bitdepth);
}
}
}
else
{
if(line.contains("[Audio Info]", Qt::CaseInsensitive))
{
info.techInfo().setAudioType("Avisynth");
info.techInfo().setContainerType("Avisynth");
bInfoHeaderFound = true;
}
}
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
//Check exit code
//.........这里部分代码省略.........
示例11: decode
bool ShortenDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
args << "-x";
args << QDir::toNativeSeparators(sourceFile);
args << QDir::toNativeSeparators(outputFile);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
//The Shorten Decoder doesn't actually send any status updates :-[
emit statusUpdated(20 + (QUuid::createUuid().data1 % 80));
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("Shorten process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS || QFileInfo(outputFile).size() == 0)
{
return false;
}
return true;
}
示例12: analyzeFile
const AudioFileModel AnalyzeTask::analyzeFile(const QString &filePath, int *type)
{
*type = fileTypeNormal;
AudioFileModel audioFile(filePath);
QFile readTest(filePath);
if(!readTest.open(QIODevice::ReadOnly))
{
*type = fileTypeDenied;
return audioFile;
}
if(checkFile_CDDA(readTest))
{
*type = fileTypeCDDA;
return audioFile;
}
readTest.close();
bool skipNext = false;
unsigned int id_val[2] = {UINT_MAX, UINT_MAX};
cover_t coverType = coverNone;
QByteArray coverData;
QStringList params;
params << QString("--Inform=file://%1").arg(QDir::toNativeSeparators(m_templateFile));
params << QDir::toNativeSeparators(filePath);
QProcess process;
lamexp_init_process(process, QFileInfo(m_mediaInfoBin).absolutePath());
process.start(m_mediaInfoBin, params);
if(!process.waitForStarted())
{
qWarning("MediaInfo process failed to create!");
qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData());
process.kill();
process.waitForFinished(-1);
return audioFile;
}
while(process.state() != QProcess::NotRunning)
{
if(*m_abortFlag)
{
process.kill();
qWarning("Process was aborted on user request!");
break;
}
if(!process.waitForReadyRead())
{
if(process.state() == QProcess::Running)
{
qWarning("MediaInfo time out. Killing process and skipping file!");
process.kill();
process.waitForFinished(-1);
return audioFile;
}
}
QByteArray data;
while(process.canReadLine())
{
QString line = QString::fromUtf8(process.readLine().constData()).simplified();
if(!line.isEmpty())
{
//qDebug("Line:%s", QUTF8(line));
int index = line.indexOf('=');
if(index > 0)
{
QString key = line.left(index).trimmed();
QString val = line.mid(index+1).trimmed();
if(!key.isEmpty())
{
updateInfo(audioFile, &skipNext, id_val, &coverType, &coverData, key, val);
}
}
}
}
}
if(audioFile.metaInfo().title().isEmpty())
{
QString baseName = QFileInfo(filePath).fileName();
int index = baseName.lastIndexOf(".");
if(index >= 0)
{
baseName = baseName.left(index);
}
baseName = baseName.replace("_", " ").simplified();
index = baseName.lastIndexOf(" - ");
if(index >= 0)
{
baseName = baseName.mid(index + 3).trimmed();
//.........这里部分代码省略.........
示例13: regExp
bool AC3Encoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
switch(m_configRCMode)
{
case SettingsModel::VBRMode:
args << "-q" << QString::number(qBound(0, m_configBitrate * 16, 1023));
break;
case SettingsModel::CBRMode:
args << "-b" << QString::number(g_ac3BitratesLUT[qBound(0, m_configBitrate, 18)]);
break;
default:
THROW("Bad rate-control mode!");
break;
}
if(m_configAudioCodingMode >= 1)
{
args << "-acmod" << QString::number(m_configAudioCodingMode - 1);
}
if(m_configDynamicRangeCompression != 5)
{
args << "-dynrng" << QString::number(m_configDynamicRangeCompression);
}
if(m_configExponentSearchSize != 8)
{
args << "-exps" << QString::number(m_configExponentSearchSize);
}
if(m_configFastBitAllocation)
{
args << "-fba" << QString::number(1);
}
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
args << QDir::toNativeSeparators(sourceFile);
args << QDir::toNativeSeparators(outputFile);
if(!startProcess(process, m_binary, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
QRegExp regExp("progress:(\\s+)(\\d+)%(\\s+)\\|");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("Aften process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok = false;
int progress = regExp.cap(2).toInt(&ok);
if(ok && (progress > prevProgress))
{
emit statusUpdated(progress);
prevProgress = qMin(progress + 2, 99);
}
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
//.........这里部分代码省略.........
示例14: executeFFMpegPipe
/** Runs the specified command (should be ffmpeg), and lets
* writeFrame pipe data into it 1 frame at a time.
*
* @param[in] strCmd A string containing the command to execute and
* all of its arguments
* @param[out] progress A function that takes one float argument
* (the percentage of the ffmpeg operation complete) and
* may display the output to the user in any way it
* sees fit.
* @param[in] writeFrame A function that takes two arguments, a
* process (the ffmpeg process) and an integer
* (frames processed or -1, see full description).
* This function should write a single frame to the
* process. The function returns true value if it
* actually wrote a frame.
*
* This function operates generally as follows:
* 1. Spawn process with the command from strCmd
* 2. Check ffmpeg's output for a progress update.
* 3. Add frames with writeFrame until it returns false.
* 4. Repeat from step 2 until all frames have been written.
*
* The idea is that there are two forms of processing occuring
* simultaneously, generating frames to send to ffmpeg, and ffmpeg
* encoding those frames. Whether these this actually occur
* concurrently or one after another appears to depend on the environment.
*
* The writeFrame function deserves a bit of extra details. It does
* not only return false when there is an error in generating or
* writing a frame, it also does it when it wants to "return control"
* to the rest of the executeFFMpegPipe function for the purposes of
* reading updates from ffmpeg's output. This should be done every
* once in a while if possible, but with some formats (specifically gif),
* all frames must be loaded before any processing can continue, so
* there is no point returning false for it until all frames have
* been written. writeFrame is also responsible for closing the writeChannel
* of the process when it has finished writing all frames. This indicates
* to executeFFMpegPipe that it no longer needs to call writeFrame.
*
* @return Returns Status::OK if everything went well, and Status::FAIL
* and error is detected (usually a non-zero exit code for ffmpeg).
*/
Status MovieExporter::executeFFMpegPipe(QString strCmd, std::function<void(float)> progress, std::function<bool(QProcess&, int)> writeFrame)
{
qDebug() << strCmd;
QProcess ffmpeg;
ffmpeg.setReadChannel(QProcess::StandardOutput);
// FFmpeg writes to stderr only for some reason, so we just read both channels together
ffmpeg.setProcessChannelMode(QProcess::MergedChannels);
ffmpeg.start(strCmd);
if (ffmpeg.waitForStarted())
{
int framesGenerated = 0;
int lastFrameProcessed = 0;
const int frameStart = mDesc.startFrame;
const int frameEnd = mDesc.endFrame;
while(ffmpeg.state() == QProcess::Running)
{
if (mCanceled)
{
ffmpeg.terminate();
return Status::CANCELED;
}
// Check FFmpeg progress
int framesProcessed = -1;
if(ffmpeg.waitForReadyRead(10))
{
QString output(ffmpeg.readAll());
QStringList sList = output.split(QRegExp("[\r\n]"), QString::SkipEmptyParts);
for (const QString& s : sList)
{
qDebug() << "[ffmpeg]" << s;
}
if(output.startsWith("frame="))
{
lastFrameProcessed = framesProcessed = output.mid(6, output.indexOf(' ')).toInt();
}
}
if(!ffmpeg.isWritable())
{
continue;
}
while(writeFrame(ffmpeg, framesProcessed))
{
framesGenerated++;
const float percentGenerated = framesGenerated / static_cast<float>(frameEnd - frameStart);
const float percentConverted = lastFrameProcessed / static_cast<float>(frameEnd - frameStart);
progress((percentGenerated + percentConverted) / 2);
}
const float percentGenerated = framesGenerated / static_cast<float>(frameEnd - frameStart);
const float percentConverted = lastFrameProcessed / static_cast<float>(frameEnd - frameStart);
progress((percentGenerated + percentConverted) / 2);
}
//.........这里部分代码省略.........
示例15: process
void MarketSrcPackage::process()
{
if (!m_Initialized)
throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,
"package "+m_PackageFilename+" not initialized");
if (!m_Downloaded)
throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,
"package "+m_PackageFilename+" cannot be processed before download");
if (!m_CMakeProgram.isFound())
throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,"CMake command not defined");
std::string BuildConfigOptions = composeFullBuildOptions(getPackageType(), m_BuildConfigOptions);
std::string BuildDir = m_TempBuildsDir + "/" + m_ID;
std::string SrcInstallDir = getInstallPath() + "/" + m_ID;
// creating installation dir
if (openfluid::tools::Filesystem::isDirectory(SrcInstallDir))
openfluid::tools::Filesystem::removeDirectory(SrcInstallDir);
if (!openfluid::tools::Filesystem::makeDirectory(SrcInstallDir))
throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,
"unable to create source directory for "+m_ID+" package");
// creating build dir
if (openfluid::tools::Filesystem::isDirectory(BuildDir))
openfluid::tools::Filesystem::removeDirectory(BuildDir);
if (!openfluid::tools::Filesystem::makeDirectory(BuildDir))
throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,
"unable to create build directory for "+m_ID+" package");
// == Building commands ==
QString UntarCommand = QString("\"%1\" -E chdir \"%2\" \"%1\" -E tar xfz \"%3\"")
.arg(m_CMakeProgram.getFullProgramPath(),
QString::fromStdString(SrcInstallDir),
QString::fromStdString(m_PackageDest));
QString BuildConfigCommand = QString("\"%1\" -E chdir \"%2\" \"%1\" \"%3\" %4")
.arg(m_CMakeProgram.getFullProgramPath(),
QString::fromStdString(BuildDir),
QString::fromStdString(SrcInstallDir),
QString::fromStdString(BuildConfigOptions));
QString BuildCommand = QString("\"%1\" -E chdir \"%2\" \"%1\" --build .")
.arg(m_CMakeProgram.getFullProgramPath(),
QString::fromStdString(BuildDir));
// uncompressing package
{
QProcess Untar;
Untar.start(UntarCommand);
Untar.waitForFinished(-1);
Untar.waitForReadyRead(-1);
appendToLogFile(QString(Untar.readAllStandardOutput()).toStdString());
int RetValue = Untar.exitCode();
if (RetValue != 0)
{
appendToLogFile(QString(Untar.readAllStandardError()).toStdString());
throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,
"Error uncompressing sources package using CMake");
}
}
// configuring the build
{
QProcess Config;
Config.start(BuildConfigCommand);
Config.waitForFinished(-1);
Config.waitForReadyRead(-1);
appendToLogFile(QString(Config.readAllStandardOutput()).toStdString());
int RetValue = Config.exitCode();
if (RetValue != 0)
{
appendToLogFile(QString(Config.readAllStandardError()).toStdString());
throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,
"Error configuring package build using CMake");
}
}
// building
{
QProcess Build;
Build.start(BuildCommand);
Build.waitForFinished(-1);
Build.waitForReadyRead(-1);
//.........这里部分代码省略.........