c++:异步抛出 C2752 和 C2064

标签 c++ multithreading templates asynchronous throw

我很难理解如何使用 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/

相关文章:

c++ - 用剩菜初始化类

c++ - 'int a' 声明隐藏参数

vue.js - 将 Vue Formulate 与架构结合使用

c++ - std::less 编译问题

c++ - 将数组 (int*) 设置为 NULL 是否会释放它占用的内存?

c++ - 重载运算符 +

Java线程执行不同的任务?

multithreading - 单元测试时如何处理其他线程中引发的异常?

c - 如何使用临界区

c++ - 正确对齐内存中模板,参数顺序不变