我正在尝试将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 中止(核心已弃用)
有人可以向我解释为什么引发异常吗?
答案 0 :(得分:3)
std::packaged_task::operator()
间接使用std::call_once
,根据this链接,它需要pthread库才能运行,否则会抛出std::system_error
。因此,要摆脱此异常,您需要使用-lpthread
进行构建。听起来很奇怪,但是为我工作。