首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从io_context中移除工作或使用多个io_context对象

从io_context中移除工作或使用多个io_context对象
EN

Stack Overflow用户
提问于 2018-05-20 11:17:04
回答 1查看 1.2K关注 0票数 9

目前,我正在尝试将通过postdispatch排队的工作移至io_context。该工作由少量排队者组排队,对于这些排队者组,该工作应一次性全部移除:

代码语言:javascript
复制
boost::asio::io_context context;

auto work = [] {
  // ...
};
boost::asio::post(context, std::move(work));

// ... now I want to remove the work

asio库是否提供了这样的功能?

目前,我正在开发的应用程序正在使用一个线程池,它从多个线程调用io_context::run()

我的想法是,我可以创建多个由线程池分派的io_context,这样一个io_context就代表一个可以通过io_context::stop()删除的组。所有io_context都将保存在单个列表中,然后为未完成的事件汇集该列表。

然而,我认为使用池化或等待许多io_context可能会导致性能问题。是否有不同的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2018-05-29 07:12:33

不,没有从io_context中删除发布的职位的机制。或者,您可以修改您的作业,以在它们运行(未测试)之前检查是否设置了“取消标志”:

代码语言:javascript
复制
// create a cancellation flag
const auto cancel = std::make_shared<std::atomic<bool> >();

auto work = [=] {

    // check to see if the flag has been set
    // if so, return without performing our task
    if(*cancel)
        return;

    // perform some task
};

// post our job
boost::asio::post(context, std::move(work));

...

// cancel all jobs checking this flag
*cancel = true;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50431352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档