【问题标题】:Set value of temporary std::future设置临时 std::future 的值
【发布时间】:2020-08-21 23:49:30
【问题描述】:

我有一个返回std::pair<std::future<bool>,std::future_status> 的函数。在某些情况下,我希望future.get() 始终返回true,我想知道是否有合法的方法可以做到这一点。目前我正在做一些可怕的事情:

std::future<bool> tmp = std::async(std::launch::async,[]()->bool{return true;}); 
return std::make_pair(std::move(tmp), std::future_status::ready); 

有人知道将 tmp 的值设置为 true 的更好方法吗?

【问题讨论】:

  • ``` std::promise tmpPromise; //默认构造promise std::future tmp = tmpPromise.get_future(); //获取与promise关联的future tmpPromise.set_value(true); //设置未来值```其实是一个很好的答案(谁贴出来然后又删了。)。它是同步的,并且可能占用较少的资源。
  • 我贴出来了。在我的计算机上执行它时,我一直收到错误消息。我想在给出明确答案之前对其进行调试。
  • 我编译了它,它可以在我的机器上运行。必须在服务器上对其进行测试,但我认为它应该与平台无关。
  • 我将取消删除答案

标签: c++ multithreading asynchronous future


【解决方案1】:

我不确定你想达到什么效果,但你可以使用std::promise直接设置std::future的值:

#include<future>

std::promise<bool> tmpPromise; //default construct promise

std::future<bool> tmp = tmpPromise.get_future(); //get future associated with promise

tmpPromise.set_value(true); //set future value

return std::make_pair(tmp, std::future_status::ready);

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    相关资源
    最近更新 更多