Boost -Asio - проблемы, создающие отмену/перезапутимые задачиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Boost -Asio - проблемы, создающие отмену/перезапутимые задачи

Сообщение Anonymous »

фон/цель
Я очень на ранних стадиях обучения Asio. В настоящее время моя цель состоит в том, чтобы IO_Context управлял несколькими долгосрочными задачами, над которыми будет выполнено несколько рабочих потоков. Каждая задача имеет возможность стать устаревшей/недействительной в какой -то момент времени, поэтому я поддерживаю ASIO :: Cancellation_Signal наряду с будущим, которое используется для получения результатов, если он успешно завершил . /> Прогресс: < /h1>
API, который я пытаюсь реализовать, является чем-то вроде: < /p>

Код: Выделить всё

template  struct CancellableTask {
// future/cancellation_signal are Non-CopyConstructible.
// Keep shared_ptrs to allow CopyConstructible-ness
std::shared_ptr m_task;
std::shared_ptr m_cancel;

asio::cancellation_slot cancelSlot() { return m_cancel->slot(); }
void cancel() { m_cancel->emit(asio::cancellation_type::all); }
};

namespace util {

template  struct WrappedType;

template 
struct WrappedType {
using type = T;
};

} // namespace util

namespace task {

template  auto spawn(asio::io_context& io, Coroutine&& coroutine) {
using FutureReturn = util::WrappedType::type;
using FutureType = std::future;

CancellableTask task{
std::make_shared(), std::make_shared()
};

*task.m_task = co_spawn(
io,
std::forward(coroutine),
asio::bind_cancellation_slot(task.cancelSlot(), asio::use_future)
);

return task;
}
} // namespace task
< /code>
Использование выглядит следующим образом: < /p>
asio::awaitable sleepTask(std::chrono::seconds duration) try {
auto ex = co_await asio::this_coro::executor;
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79606106/boost-asio-issues-creating-cancellable-restartable-tasks[/url]
Ответить

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

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

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

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

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