c ++:异步抛出C2752和C2064

时间:2014-04-03 16:38:04

标签: c++ multithreading templates asynchronous throw

我很难理解如何使用异步功能。

我不想使用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。

1 个答案:

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