我很难理解如何使用 async 函数。
我不想使用boost库,只想异步运行一个函数,所以我请求你的帮助:
- 如何使用async 使这段代码正常工作?
- 还有其他方法吗?
这是我的一段代码:
void KWxAPI::update(bool const no_interact)
{
async(launch::async, &KWxAPI::syncUpdate, no_interact);
}
bool KWxAPI::syncUpdate(bool const nointeract)
{
//blablabla
}
这里是构建提示的错误: 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
结束时被破坏> 语句,因为您没有将它存储在任何地方。在它的析构函数中,它会阻塞直到执行完成。
关于c++:异步抛出 C2752 和 C2064,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22843807/