Могу ли я использовать разные методы с разными интервалами независимо друг от друга, используя boost::asio::io_context?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я использовать разные методы с разными интервалами независимо друг от друга, используя boost::asio::io_context?

Сообщение Anonymous »

Я пытаюсь реализовать код C++, который должен вызывать три разных метода, независимых друг от друга, с разными интервалами.
Например, скажем, метод_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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»