bool isTrue()
{
return true
}
int main ()
{
if (isTrue())
{
// Do something
}
}
我意识到这个示例代码毫无意义,但逻辑并不重要,只是试图为问题设置它。如何在isTrue()上调用线程?通常,我会使用std :: thread t(这里是插入函数),但这不能在这里完成,因为线程没有返回bool。有没有可行的方法来做到这一点?我对线程等相当新,所以我很容易理解一些基本的东西。
答案 0 :(得分:1)
因为线程没有返回bool。有没有可行的方法呢?
std :: async是异步启动任务的一种非常方便的方法。它会将返回的结果存储在"共享状态"以便我们以后可以获得它(当它准备就绪时)
要启动在后台运行isTrue()
的异步任务,我们会调用(以后可以通过fut访问结果)
std::future<bool> fut = std::async(std::launch::async, isTrue);
为了在我们需要时获得结果(即在if条件下),我们将调用
bool result = fut.get();
然后你可以在if语句中使用它。
if (result)
{
// Do something
}
你基本上可以将任何类型的函数传递给std :: async并将结果存储在关联的std :: future中。