MCPcopy Create free account
hub / github.com/WarmUpTill/SceneSwitcher / StartProcessAndWait

Method StartProcessAndWait

plugins/base/utils/process-config.cpp:66–103  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

64}
65
66std::variant<int, ProcessConfig::ProcStartError>
67ProcessConfig::StartProcessAndWait(int timeout)
68{
69 ResetFinishedProcessData();
70
71 QProcess process;
72 process.setWorkingDirectory(QString::fromStdString(WorkingDir()));
73 process.start(QString::fromStdString(Path()), Args());
74 SetProcessId(QString::number(process.processId()).toStdString());
75 vblog(LOG_INFO, "run \"%s\" with a timeout of %d ms", Path().c_str(),
76 timeout);
77
78 if (!process.waitForFinished(timeout)) {
79 if (process.error() == QProcess::FailedToStart) {
80 vblog(LOG_INFO, "failed to start \"%s\"!",
81 Path().c_str());
82 return ProcStartError::FAILED_TO_START;
83 }
84
85 SetFinishedProcessData(process);
86 vblog(LOG_INFO,
87 "timeout while running \"%s\"\nAttempting to kill process!",
88 Path().c_str());
89 process.kill();
90 process.waitForFinished();
91
92 return ProcStartError::TIMEOUT;
93 }
94
95 SetFinishedProcessData(process);
96
97 if (process.exitStatus() == QProcess::NormalExit) {
98 return process.exitCode();
99 }
100
101 vblog(LOG_INFO, "process \"%s\" crashed!", Path().c_str());
102 return ProcStartError::CRASH;
103}
104
105void ProcessConfig::SetFinishedProcessData(QProcess &process)
106{

Callers 2

PerformActionMethod · 0.80
RunProcessMethod · 0.80

Calls 3

ArgsClass · 0.50
startMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected