如何在条件内的Bool方法上启动一个线程?

时间:2018-04-19 21:57:03

标签: c++ multithreading

bool isTrue()
{
    return true
}

int main ()
{
    if (isTrue())
    {
         // Do something
    }
}

我意识到这个示例代码毫无意义,但逻辑并不重要,只是试图为问题设置它。如何在isTrue()上调用线程?通常,我会使用std :: thread t(这里是插入函数),但这不能在这里完成,因为线程没有返回bool。有没有可行的方法来做到这一点?我对线程等相当新,所以我很容易理解一些基本的东西。

1 个答案:

答案 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中。