0

我正在尝试将 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”实例后调用终止what():未知错误-1中止(核心转储)

有人能解释一下为什么抛出异常吗?

4

1 回答 1

3

std::packaged_task::operator()间接使用std::call_once,根据这个链接,它需要 pthread 库才能运行,否则它会抛出std::system_error. 所以要摆脱这个异常,你需要用-lpthread. 听起来很奇怪,但对我有用。

于 2019-01-07T17:13:07.980 回答