1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
/*
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "utilscoro.h"
CoroutineSplitter::CoroutineSplitter(std::chrono::milliseconds executionDurationLimit, std::chrono::milliseconds pauseDuration)
: m_executionDurationLimit(executionDurationLimit)
, m_pauseDuration(pauseDuration)
, m_lastStart(std::chrono::steady_clock::now())
{
m_timer.setSingleShot(true);
m_timer.setInterval(m_pauseDuration);
}
QCoro::Task<> CoroutineSplitter::operator()()
{
const auto elapsed = std::chrono::steady_clock::now() - m_lastStart;
if (elapsed > m_executionDurationLimit) {
m_timer.start();
co_await m_timer;
m_lastStart = std::chrono::steady_clock::now();
}
}
|