I've wrote the following code to test std::async()
on functions returning void
with GCC 4.8.2 on Ubuntu.
#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;
}
If i.get();
is uncommented, the message "Print here"
always exists; however, if i.get();
is commented out, "Print here"
exists if and only if USE_ASYNC
is defined (that is, std::launch::async
always leads to message printed out while std::launch::deferred
never).
Is this guaranteed behavior? What's the correct way to ensure the asynchronous call returning void
to be executed?