目前,我正在尝试将通过post
或dispatch
排队的工作移至io_context
。该工作由少量排队者组排队,对于这些排队者组,该工作应一次性全部移除:
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
可能会导致性能问题。是否有不同的解决方案?
发布于 2018-05-29 07:12:33
不,没有从io_context
中删除发布的职位的机制。或者,您可以修改您的作业,以在它们运行(未测试)之前检查是否设置了“取消标志”:
// 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;
https://stackoverflow.com/questions/50431352
复制相似问题