我有一个由函数返回的2个字符串结构数组。 但是这个函数被称为线程的可调用函数的一部分
struct mystruct* myfunc(char* param1, int param2, int param3);
std::thread t1(myfunc, param1, param2, param3);
我从std :: thread文档中了解到myfunc的返回值将被忽略。但我需要这些数据。有没有办法获得这些数据?我读到有类似std :: promise和std :: future之类的东西,但实在无法理解它们是什么。任何人都可以通过一个简单的例子来帮助我实现这个目标吗?
非常感谢,提前。
Esash
答案 0 :(得分:1)
正如@Fransisco Callego Salido已经说过要做你想要的唯一方法就是使用std :: async,但是要小心std :: async并不能保证你的函数会异步运行。 正如cppreference所说。
模板函数async异步运行函数f(可能在一个单独的线程中,它可能是线程池的一部分)并返回一个最终将保存该函数调用结果的std :: future。
为了异步运行myfunc,您必须将另一个参数传递给策略std :: async的构造函数。现在有3个政策
要记住的另一件事是,策略总是作为第一个参数传递给std :: async的构造函数,如果你忘记将它传递给std :: launch :: async | std :: launch:将使用延期策略! 因此,为了保证您的函数在新线程上执行,您必须像这样调用它。
std::future<mystruct*> myfunc_future=std::async(std::launch::async, myfunc, param1, param2, param3);
mystruct* myfunc_result=myfunc.get();