如何解决创建后,是否可以将std :: syncstd :: launch :: deferred策略更改为std :: launch :: async?
我处于许多I / O绑定任务的场景中,非常适合在后台运行。但是,我不能同时启动所有这些程序。
尽管我可以使用其他技巧(例如,计数信号量),但我想知道是否可以每次将一个已创建的std :: async(deferred)(好,将来,现在)策略更改为async
的期货完成了(嗯,有点,但希望您能有所了解)。
一旦我有了一个deferred
的未来,启动它的唯一方法就是阻止它直到结束(等待或获取,甚至没有wait_for)。我只想使其运行,但不等待它完成(现在;我将接受该块,但稍后)。
解决方法
不是真正的东西,但这在某些情况下可以解决问题:
auto deferred_f = std::async(std::launch::deferred,some_function);
auto def_to_async = [](auto &&f) { return f.get(); };
auto async_f = std::async(std::launch::async,def_to_async,std::move(deferred_f));
但是, deferred_f
现在不见了。如果有人引用或指向它,它将无法正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。