From c3588e1c367799921c78c2d7c73eb70c2cb3c73f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Tue, 26 Mar 2024 14:54:19 +0100 Subject: [PATCH] Rate limit conversion from script --- loadrunable.cpp | 9 ++++++--- loadrunable.h | 4 +++- scriptengine.cpp | 5 ++++- scriptengine.h | 2 ++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/loadrunable.cpp b/loadrunable.cpp index cb26f12..904c6ee 100644 --- a/loadrunable.cpp +++ b/loadrunable.cpp @@ -520,11 +520,12 @@ bool loadImage(const QString &path, ImageInfoData &info, std::shared_ptr rawimage, ImageInfoD void ConvertRunable::run() { - qDebug() << m_infile << m_outfile; + QSemaphoreReleaser release; + if(m_semaphore)release = QSemaphoreReleaser(m_semaphore); + ImageInfoData imageinfo; std::shared_ptr rawimage; loadImage(m_infile, imageinfo, rawimage); diff --git a/loadrunable.h b/loadrunable.h index a211778..19e69a7 100644 --- a/loadrunable.h +++ b/loadrunable.h @@ -3,6 +3,7 @@ #include #include +#include #include "imageinfo.h" class RawImage; @@ -35,13 +36,14 @@ public: ConvertParams(){} ConvertParams(const QVariantMap &map); }; - ConvertRunable(const QString &in, const QString &out, const QString &format, const ConvertParams ¶ms = ConvertParams()); + ConvertRunable(const QString &in, const QString &out, const QString &format, const ConvertParams ¶ms = ConvertParams(), QSemaphore *semaphore = nullptr); void run() override; private: QString m_infile; QString m_outfile; QString m_format; ConvertParams m_params; + QSemaphore *m_semaphore; }; #endif // LOADRUNABLE_H diff --git a/scriptengine.cpp b/scriptengine.cpp index 7542c38..3cdba65 100644 --- a/scriptengine.cpp +++ b/scriptengine.cpp @@ -17,6 +17,7 @@ ScriptEngine::ScriptEngine(QObject *parent) : QObject(parent) QJSValue engine = _jsEngine->newQObject(this); _jsEngine->globalObject().setProperty("engine", engine); _database->init(QLatin1String("scriptengine")); + _semaphore.release(_pool->maxThreadCount()); } void ScriptEngine::setParams(const QString &scriptPath, const QStringList &paths, const QString &outputDir) @@ -79,7 +80,8 @@ bool ScriptEngine::convert(File *file, QString &outpath, QString format, QVarian info.setFile(path); //qDebug() << info.absolutePath() + "/" + info.completeBaseName() + "." + format.toLower(); - _pool->start(new ConvertRunable(file->absoluteFilePath(), info.absolutePath() + "/" + info.completeBaseName() + "." + format.toLower(), format, params)); + _semaphore.acquire(); + _pool->start(new ConvertRunable(file->absoluteFilePath(), info.absolutePath() + "/" + info.completeBaseName() + "." + format.toLower(), format, params, &_semaphore)); return true; } @@ -109,6 +111,7 @@ void ScriptEngine::run() scriptFile.close(); QJSValue result = _jsEngine->evaluate(contents, _scriptPath); qDebug() << result.isError() << result.toString(); + _pool->waitForDone(); if(result.isError()) { QString error = result.property("name").toString() + " on line " + result.property("lineNumber").toString() + " : " + result.toString(); diff --git a/scriptengine.h b/scriptengine.h index 50a278f..1aea2be 100644 --- a/scriptengine.h +++ b/scriptengine.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "database.h" namespace Script @@ -19,6 +20,7 @@ class ScriptEngine : public QObject QJSEngine *_jsEngine; Database *_database; QThreadPool *_pool; + QSemaphore _semaphore; QString _scriptPath; QString _outputDir; QStringList _paths;