C++で簡単非同期プログラミング(std::thread,std::async) 

result.get()で処理を待って、値を返してくれる

#include <future>

...

auto result = std::async(std::launch::async, [] { return long_hogehoge(); });

// 非同期中の処理なにか

std::cout << result.get() << std::endl;

処理中かどうか判定をいれてその間アニメーションさせるとかさせるなら

auto status = result->wait_for(std::chrono::milliseconds(0));
bool isGet = status == std::future_status::ready;

上記のように書くことで isGet 変数にスレッドが終わっていれば true, 終わっていなければ falseが入ります。