我正在運行Visual Studio 2012,並試圖瞭解如何std :: async工作。我創建了一個非常簡單的C++控制檯應用程序:std :: launch :: async被阻塞,像一個同步進程
#include "stdafx.h"
#include <future>
#include <iostream>
void foo() {
std::cout << "foo() thread sleep" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
std::cout << "foo() thread awake" << std::endl;
}
int main()
{
std::future<void> res = std::async(std::launch::async, foo);
res.get();
std::cout << "MAIN THREAD" << std::endl;
system("pause");
return 0;
}
我最初的期望是看到「主線程」的打印輸出出現以前「富()線程清醒」,因爲這兩個線程異步運行,同時FOO ()由於其睡眠行爲而落後。但是,這不是實際發生的情況。調用res.get()會阻塞,直到foo()喚醒,然後纔會進入「MAIN THREAD」打印輸出。這是一個同步行爲的指示,所以我想知道如果我可能錯過了一些東西,或者沒有完全掌握實現。我已經瀏覽了很多關於這個問題的帖子,但是仍然沒有任何意義。任何幫助,將不勝感激!
您認爲['future :: get'](http://en.cppreference.com/w/cpp/thread/future/get)是做什麼的? –
在std :: future <>實例上調用'get()'會阻塞該線程,直到得到結果。 http://en.cppreference.com/w/cpp/thread/future/get – user2296177
那麼這與直接調用foo()函數有什麼不同? – boondocks