27#include <QElapsedTimer>
33#include <QTemporaryDir>
36#include "core/LogEntry.h"
61class ParallelProcessRunner :
public QObject {
65 explicit ParallelProcessRunner(QObject *parent =
nullptr);
66 ~ParallelProcessRunner()
override;
82 void error(
const QString &errorMessage);
95 void chunkFailed(
int chunkIndex,
const QString &errorMessage);
109 const QStringList &inputData,
110 int chunkCount)
const;
121 const QStringList &chunkData,
122 const QString &tempOutputPath) = 0;
132 const QStringList &tempOutputPaths,
133 const QString &finalOutputPath,
134 QString &errorMessage) = 0;
143 virtual void onAllCompleted(
int successCount,
int failureCount,
int totalCount);
155 const QString &programPath,
156 const QStringList &inputData,
157 const QString &finalOutputPath);
163 QElapsedTimer elapsed_;
166 void onProcessFinished(
int exitCode, QProcess::ExitStatus exitStatus);
167 void onProcessError(QProcess::ProcessError
error);
168 void onProcessStdOut();
169 void onProcessStdErr();
172 QString processSource(QProcess *process)
const;
173 void checkAllProcessesCompleted();
176 QString programPath_;
180 std::vector<QProcess*> processes_;
181 QStringList tempOutputPaths_;
182 int completedProcessCount_;
183 int failedProcessCount_;
184 QHash<QProcess*, QString> pendingStdout_;
185 QHash<QProcess*, QString> pendingStderr_;
virtual std::vector< QStringList > chunkInputData(const QStringList &inputData, int chunkCount) const
Divide input data into chunks for parallel processing.
void error(const QString &errorMessage)
Emitted when an error occurs that prevents execution.
void chunkCompleted(int chunkIndex, int totalChunks)
Emitted when a single chunk completes successfully.
QString getTempOutputPath(int chunkIndex) const
Get path to temporary output file for a chunk.
void progress(const QString &message)
Emitted with progress updates (e.g., "Completed 3/8 chunks").
virtual bool mergeResults(const QStringList &tempOutputPaths, const QString &finalOutputPath, QString &errorMessage)=0
Merge outputs from all chunks into final result.
QString finalOutputPath_
Final output file path.
void setParallelCount(int count)
Set number of parallel processes (0 = auto-detect from CPU cores).
void logMessage(const LogEntry &entry)
Emitted when a chunk process produces log output.
int getParallelCount() const
Get current parallel count setting.
void chunkFailed(int chunkIndex, const QString &errorMessage)
Emitted when a single chunk fails.
void cancel()
Cancel all running processes.
virtual QStringList prepareProcessArguments(int chunkIndex, const QStringList &chunkData, const QString &tempOutputPath)=0
Prepare command-line arguments for a specific chunk.
virtual void onAllCompleted(int successCount, int failureCount, int totalCount)
Called when all processes have completed (success or failure).
bool isRunning() const
Check if any process is currently running.
QStringList errorMessages_
Aggregated error messages.
void runParallel(const QString &programPath, const QStringList &inputData, const QString &finalOutputPath)
Start parallel execution.
QTemporaryDir tempDir_
Temporary directory for chunk outputs.