2015-07-09 1 views
2

У меня есть простой фрагмент кода, который генерирует исключение, если это не так. Все соответствующие заголовки были включены, и программа строится без ошибок. Код ниже. Исключение возникает при выполнении result1.get(); Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно? Заранее благодарим за любую помощь.Использование async и future бросает исключение на linux (gcc 4.8.4)

int func1() 
{ 
    return 0; 
} 

int main() 
{ 
    future<int> result1(async(func1)); 
    int result = result1.get(); 
    return 0; 
} 

В результате выполнения программы дает мне это:

terminate called after throwing an instance of 'std::system_error' 
what(): Unknown error -1 

ответ

2

Добавить -pthread флагам компилятора. Не уверен в деталях, но по какой-то причине gcc 4.8 дает Unknown error -1, если это было не учтено (однако, по крайней мере, IMHO, он должен либо предупредить, что вы не включили потоковую передачу или не дали некоторую ошибку привязки вместо компиляции и металирования во время выполнения).

+0

Пробовал, включая флаг -pthread, но это не решило проблему. Мне интересно, есть ли ошибка в gcc 4.8.4. – Smithy

+0

@Smithy ok, ссылка на страницу руководства сломана, кажется, что проект не может быть общим. Командная строка в примере была 'g ++ -std = C++ 11 -pthread -o main * .cpp', и это, казалось, работало нормально. Конечно, может быть, что gcc 4.8.4 ввел ошибку, но я очень сомневаюсь в этом. –

+0

@ Сmithy какой вкус/версия linux вы используете? Может быть, https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1228201 уместен? –

Смежные вопросы