Я написал следующий код, чтобы проверить std::async()
на функции, возвращающие void
с GCC 4.8.2 на Ubuntu.Действительно ли std :: async вызывается для функций, возвращающих пустоту?
#include <future>
#include <iostream>
void functionTBC()
{
std::cerr << "Print here\n";
}
int main(void)
{
#ifdef USE_ASYNC
auto i = std::async(std::launch::async, functionTBC);
#else
auto i = std::async(std::launch::deferred, functionTBC);
#endif
//i.get();
return 0;
}
Если i.get();
является раскомментировать, то сообщение "Print here"
всегда существует; однако, если i.get();
закомментирован, "Print here"
существует, если и только если USE_ASYNC
определен (то есть, std::launch::async
всегда приводит к распечатке сообщения, а std::launch::deferred
никогда).
Это гарантированное поведение? Каков правильный способ обеспечения возврата асинхронного вызова void
?
Если вы запрашиваете отложенный запуск и никогда не вызываете .get в это будущее, ваша функция никогда не будет выполнена. Это не имеет ничего общего с функцией, возвращающей void или любой другой тип. – sbabbi