gpt4 book ai didi

c++ - 如何在不使用 std::async 的情况下使用 std::future?

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:52 25 4
gpt4 key购买 nike

我正在使用两个 boost::interprocess::message_queue用于进程间通信。一个用于发送命令,另一个用于接收答案。当我发送命令时,我正在创建一个 std::promise返回 std::future反对我函数的调用者

std::shared_future<bool> PluginMQAdapter::exec(const std::string& exec_str) const
{
std::lock_guard<std::mutex> lk(mtx);
promise_queue.push(std::make_shared<std::promise<bool> >());
need_exec_queue.push(exec_str);

return promise_queue.back()->get_future();
}

收到结果后

int number = 0;
if(recv_mq->try_receive(&number, sizeof(number), recvd_size, priority) && !promise_queue.empty())
{
promise_queue.front()->set_value(number != 0);
promise_queue.pop();
}

我如何投票 std::future在这种情况下? wait_forwait_until不工作,因为 future 的 _Running 字段设置为 false,因此 future 的状态总是被推迟。如何使用 std::future不使用std::async

最佳答案

找到了 boost::shared_future 的解决方法

auto result = exec(exec_str);
const unsigned int wait_msec = 10, max_wait_msec = 5000;
unsigned int i = 0;
while(!result.is_ready() && i < max_wait_msec)
{
std::this_thread::sleep_for(std::chrono::milliseconds(wait_msec));
i += wait_msec;
}
if(result.is_ready())
return result.get();

使它成为标准的问题是什么?!

更短的版本也可以

boost::future_status ok = result.wait_for(boost::chrono::milliseconds(max_wait_msec));
if((ok == boost::future_status::ready))
return result.get();

关于c++ - 如何在不使用 std::async 的情况下使用 std::future?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23886612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com