28 QObject::connect(&m_process, &QProcess::finished,
this, &QProcessScheduler::processNext);
29 QObject::connect(&m_process, &QProcess::errorOccurred,
this,
30 &QProcessScheduler::onErrorOccurred);
41 m_queue.enqueue(StartMarker{ id });
42 for (
const auto &x : list) {
43 const QueueElement queueElement{ x };
44 if (!m_queue.contains(queueElement))
45 m_queue.enqueue(queueElement);
47 m_queue.enqueue(EndMarker{ id });
71 auto removeQueueElementsForStartMarkerIt = [
this, &id](
auto begin) {
72 auto end = std::find_if(begin, m_queue.cend(),
73 std::bind(isEndMarkerOf, std::placeholders::_1, id));
76 if (end != m_queue.cend())
78 m_queue.erase(begin, end);
81 if (m_current != id) {
82 const auto begin = std::find_if(m_queue.cbegin(), m_queue.cend(),
83 std::bind(isStartMarkerOf, std::placeholders::_1, id));
84 removeQueueElementsForStartMarkerIt(begin);
90 QObject::disconnect(&m_process, &QProcess::finished,
this, &QProcessScheduler::processNext);
91 QObject::disconnect(&m_process, &QProcess::errorOccurred,
this,
92 &QProcessScheduler::onErrorOccurred);
95 m_process.waitForFinished();
96 removeQueueElementsForStartMarkerIt(m_queue.cbegin());
97 QObject::connect(&m_process, &QProcess::finished,
this, &QProcessScheduler::processNext);
98 QObject::connect(&m_process, &QProcess::errorOccurred,
this,
99 &QProcessScheduler::onErrorOccurred);