我很难理解如何使用异​​步函数。

我不想使用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语句的末尾被破坏了,因为您没有将其存储在任何地方。在它的析构函数中,它阻塞直到执行完成。

    09-19 05:21