我编写了以下代码来测试在 Ubuntu 上使用 GCC 4.8.2std::async()
返回的函数。void
#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
执行的正确方法是什么?