我很难理解如何使用异步功能。
我不想使用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。答案 0 :(得分:1)
您的代码无法编译,因为您尝试调用指向成员函数的指针,而不传递对象以调用它。
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
语句的末尾被破坏,因为您没有将其存储在任何地方。在它的析构函数中,它会阻塞,直到执行完成。