Например, скажем, метод_1 должен вызываться каждые секунды T1, а метод_2 должен вызываться вызывается каждые T2 секунды, и, наконец, метод 3 должен выполняться с интервалом T3 секунды.
Могу ли я реализовать его, как показано ниже? Делает ли последовательный вызов методов внутри одного потока их зависимостью друг от друга? например, если предположить, что интервал метода1 составляет 100 с, а T2 равен 1 с.
Разве не вызывается блок метода1, вызывающий метод2 каждые 1 с?
Вызывает ли метод is io_context.run() заставляет их называться независимыми друг от друга?
Код: Выделить всё
enum MethodTypes { FIRST = 0, SECOND = 1, THIRD = 2 };
struct TestTimerContext {
boost::asio::steady_timer timer;
NssStatsTimerContext(boost::asio::io_context& io) : timer(io) {}
};
Код: Выделить всё
start_process (vector condistions, vector intervals) {
if (conditions[0]) {
boost::asio::io_context io_context_first;
start_method (intervals[0], MethodTypes::FIRST, io_context_1);
}
if (conditions[1]) {
boost::asio::io_context io_context_2;
start_method (intervals[0], MethodTypes::FIRST, io_context_2);
}
if (conditions[2]) {
boost::asio::io_context io_context_3;
start_method (intervals[0], MethodTypes::FIRST, io_context_3);
}
}
start_method (uint32 interval, MethodTypes method_type, boost::asio::io_context io_context) {
io_context.run();
std::unique_ptr ctx;
ctx = std::make_unique(io_context);
auto& ctx_ref = *ctx;
if (interval ==0) {
func_cb( err, interval, method_type);
} else {
ctx_ref.timer.expires_after(std::chrono::milliseconds(interval));
ctx_ref.timer.async_wait([&](const boost::system::error_code& err) mutable {
func_cb( err, interval, method_type);
});
}
}
func_cb (
const boost::system::error_code& err,
uint32_t interval,
MethodTypes method_type) {
if (err) {
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78290308/can-i-use-different-methods-with-different-intervals-independently-using-boost[/url]
Мобильная версия