稍后从线程函数中获取返回值
C++ Get the return value from a threaded function later
是否可以不等待线程函数的返回值?例如稍后检查是否返回值,并在该函数执行时做其他事情?我的意思是,如果你必须等待函数返回,那就不是真正的多线程,因为你可以直接调用函数。
#include <thread>
#include <future>
int func_1(int x)
{
return x; //Assume this takes several seconds to complete
}
int main()
{
auto future = std::async(func_1, 2);
int number = future.get(); //Whole program waits for this
//More code later
while(!number) //Check if number ever returned?
{
//Wait for it or assume some error/default
}
return 0;
}
您正在立即请求结果,而不是做其他事情然后在需要时获得结果。如果你这样做:
int main()
{
auto future = std::async(func_1, 2);
//More code later
int number = future.get(); //Whole program waits for this
// Do something with number
return 0;
}
然后你可以在More code later
位做一些其他的事情,然后当你需要调用get()
的结果时阻塞。
或者,您可以轮询使用wait_for或wait_until来查看值是否可用,如果结果没有准备好,则执行一些操作。
您可以通过零超时调用future::wait_for
来检查未来是否准备好,并检查返回值是否等于future_status::ready
Btw: std::async
返回特殊的期货,你应该考虑是否真的想使用它。更详细的信息:http://scottmeyers.blogspot.com/2013/03/stdfutures-from-stdasync-arent-special.html
相关文章:
- 从python中调用C++函数并获取返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何将不可移动和不可复制的函数返回值获取到数组中
- 如何在 c++ 窗口中将参数和返回的退出值传递到批处理文件/从批处理文件获取返回的退出值
- 如何在 c++ 中使用 future 和 promise 从函数线程中获取返回值
- 从 Freeglut/Opengl 2.1 项目中获取返回值
- 如何从 CreateThread() 中加载的函数中获取返回值?
- Boost::ASIO:如何从io_service中获取返回值
- 关于如何在函数执行后使用和获取返回值的问题
- 如何在关机调用后在 UDP recvfrom() 调用中获取返回值 0
- 无法获取返回值
- 如何从调用的函数获取返回值,该函数在 TBB 中的另一个线程中执行
- 从 MFC(c++) 应用程序启动的可执行 jar 中获取返回值
- 如何在 c++ 中从函数获取返回值而不为其变量赋值
- 传递对象并从线程调用中获取返回值
- 如何从 QMetaObject::invokeMethod 获取返回值
- 在C++中获取返回值的类型
- 如何获取返回值并将其设置为 "x" ?
- pthread_create(),如何从传递的函数中获取返回值
- 稍后从线程函数中获取返回值