在lambda中包装并执行packaged_task

时间:2019-01-07 16:55:39

标签: c++ lambda future packaged-task

我正在尝试将packaged_task封装在lambda中,以将其存储在容器中。我在下面编写了一个用于模拟包装和调用lambda函数的测试代码。我的代码如下:

int test()
{
    return 10;
}

int main()
{
    auto task = std::make_shared<std::packaged_task<int()>>(test);
    auto result = task->get_future();
    auto wrapper = [=]() { (*task)(); };
    wrapper();
}

程序因以下异常而中止:

抛出'std :: system_error'实例后调用

terminate what():未知错误-1 中止(核心已弃用)

有人可以向我解释为什么引发异常吗?

1 个答案:

答案 0 :(得分:3)

std::packaged_task::operator()间接使用std::call_once,根据this链接,它需要pthread库才能运行,否则会抛出std::system_error。因此,要摆脱此异常,您需要使用-lpthread进行构建。听起来很奇怪,但是为我工作。