std:: promise выдает неизвестную ошибку, если вызов сна
у меня есть этот код:
#include <future>
#include <thread>
int main()
{
std::promise<void> p;
p.set_value();
p.get_future().get();
return 0;
}
и после компиляции он с gcc
он бросает std::system_error
:
$ g++ -o foo foo.cpp -std=c++11 -lpthread
$ ./foo
terminate called after throwing an instance of 'std::system_error'
what(): Unknown error -1
что странно, добавление нулевой секунды сна до создание обещания, предотвращает исключение:
int main()
{
std::this_thread::sleep_for(std::chrono::milliseconds(0));
std::promise<void> p;
p.set_value();
p.get_future().get();
return 0;
}
$ g++ -o foo foo.cpp -std=c++11 -lpthread
$ ./foo
$
пробовал gcc
4.8.5 и 5.4.0, те же результаты. Почему он так себя ведет?
1 ответов
эта ошибка происходит из вашей компиляции. Должно быть:
g++ -o foo foo.cpp -std=c++11 -pthread
на <thread>
библиотека нужен этот специальный флаг -pthread
но вы предоставили -lpthread
. Первый компилирует ваш блок перевода с полной поддержкой потока. Более поздняя только связывает библиотеку, не определяя необходимые макросы и необходимые инструменты.
на coliru: