Оберните и выполните упакованную_таску внутри лямбды - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь обернуть packaged_task в лямбду, чтобы поместить их в контейнер. Я написал тестовый код ниже для имитации обтекания и вызова лямбда-функции. Мой код выглядит следующим образом:

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 Прервано (ядро сброшено)

Может ли кто-нибудь объяснить мне, почему выбрасывается исключение?

1 Ответ

0 голосов
/ 07 января 2019

std::packaged_task::operator() косвенно использует std::call_once, что, согласно этой ссылке, требует для работы библиотеки pthread, в противном случае выдает std::system_error. Таким образом, чтобы избавиться от этого исключения, вам нужно собрать с -lpthread. Звучит странно, но у меня получилось.

...