Следующий пример кода скомпилирован успешно, но он не работает логически, поскольку жизнь время объектов IntervalTimer ограничено методом start_process(), а не временем жизни класса.
Поэтому мое решение решить эту проблему — определить 3 переменные IntervalTimer как член класса, а затем инициализировать их. внутри метода start_processing.
Метод start_process является общедоступным и может быть вызван через объект MyTestClass.
Вот код, который будет компилируется без проблем, но он не вызывает повторно три метода (метод1, метод2 и метод3 с заданными интервалами).
Код: Выделить всё
#include
#include
#include
#include
#include
#include
namespace asio = boost::asio;
using namespace std::chrono_literals;
using duration = std::chrono::steady_clock::duration;
static constexpr auto now = std::chrono::steady_clock::now;
using boost::system::error_code;
using namespace std;
enum MethodTypes { FIRST = 0, SECOND = 1, THIRD = 2 };
using Callback = std::function;
//template
struct IntervalTimer {
IntervalTimer(asio::any_io_executor ex, duration interval, Callback callback)
: interval_(interval)
, cb_(std::move(callback))
, tim_(ex, interval_)
{
loop();
}
private:
void loop() {
while (tim_.expiry()
Подробнее здесь: [url]https://stackoverflow.com/questions/78314381/how-to-call-different-methods-with-their-own-sample-intervals-inside-a-class-usi[/url]
Мобильная версия