In below program i am getting error std::future_error: No associated state error.could anyone help why i am facing this error
#include <iostream>
#include <thread>
#include <future>
#include <chrono>
#include <functional>
void task(int& var, std::future<int>& refFuture)
{
std::packaged_task<int()> mytask{ [&](){var = 25; return var;}};
auto future = mytask.get_future();
mytask.make_ready_at_thread_exit();
refFuture = std::move(future);
}
int main()
{
int variable = 10;
std::future<int> future;
std::thread t1(task, std::ref(variable), std::ref(future));
std::future_status status = future.wait_for(std::chrono::seconds(0));
if(status == std::future_status::ready)
{
int myOutput = future.get();
std::cout << "Myoutput :" << myOutput << std::endl;
}
t1.join();
}
You are not waiting for the thread to actually execute
refFuture = std::move(future);before you wait onfuturein the main thread, so the future in main does not have any associated state to wait on at that point.I am not sure what you are intending to do here, but you are supposed to prepare the
std::packaged_taskin the main thread, obtain the future from it in the main thread as well and then move thestd::packaged_taskinto the thread to execute it there (peroperator()or permake_ready_at_thread_exit). See e.g. the example at https://en.cppreference.com/w/cpp/thread/packaged_task/packaged_task.