我很难理解如何使用异步函数。
我不想使用boost库,而只想异步运行一个函数,所以我请您帮助:
这是我的一段代码:
void KWxAPI::update(bool const no_interact)
{
async(launch::async, &KWxAPI::syncUpdate, no_interact);
}
bool KWxAPI::syncUpdate(bool const nointeract)
{
//blablabla
}
这是构建gimme的错误:See on pastebin
我真的希望您能帮到我,因为我来自Java,而C++更难了:C
编辑:我正在使用MSVC。
最佳答案
您的代码无法编译,因为您尝试调用指向成员函数的指针,而不传递对象对其进行调用。KWxAPI::syncUpdate
需要使用KWxAPI
对象作为this
指针,但您没有传递一个。每当您尝试调用诸如此类的指向成员的指针函数时,都需要传递它应用作第一个参数的this
指针。
std::async(std::launch::async, &KWxAPI::syncUpdate, this, no_interact);
除此之外,您还应该知道
KWxAPI::syncUpdate
将在另一个线程中执行,但是您的std::async
语句将阻塞,直到该线程完成执行该功能为止。这是因为
std::async
返回了std::future
对象,该对象在std::async
语句的末尾被破坏了,因为您没有将其存储在任何地方。在它的析构函数中,它阻塞直到执行完成。