在 lambda 中包装并执行 packaged_task
Wrap and execute packaged_task inside lambda
我正在尝试将 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' 的实例后调用终止
什么():未知错误-1
已中止(核心已转储)
谁能解释一下为什么抛出异常?
std::packaged_task::operator()
间接使用std::call_once
,根据link,需要pthread库才能操作,否则抛出std::system_error
。所以要摆脱这个异常,你需要用-lpthread
构建。听起来很奇怪,但对我有用。
我正在尝试将 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' 的实例后调用终止 什么():未知错误-1 已中止(核心已转储)
谁能解释一下为什么抛出异常?
std::packaged_task::operator()
间接使用std::call_once
,根据std::system_error
。所以要摆脱这个异常,你需要用-lpthread
构建。听起来很奇怪,但对我有用。