#include void test_pro(promise&p)
void test_future()
此處獲取非同步操作結果使用的是get,當然還有wait以及wait_for。
函式原型:
template< class rep, class period >
std::future_status wait_for( const std::chrono::duration& timeout_duration ) const;
阻塞至結果變得可用,或者阻塞至經過指定的timeout_duration,返回值鑑別結果的狀態。
引數timeout_duration是阻塞的最大時長。
返回結果有三種狀態:
void test_wait_for());
std::cout << "waiting...\n";
std::future_status status;
do } while (status != std::future_status::ready);
std::cout << "result is " << future.get() << '\n';
}
package_task包裝了乙個可呼叫物件,允許非同步獲取該可呼叫物件產生的結果。package_task將其包裝的可呼叫物件的執行結果傳遞給乙個future物件。
c++中可呼叫物件:函式、函式指標、lambda表示式、過載了函式呼叫運算子的函式物件類以及bind建立的物件。
int addone(int x)
void test_package_task()
async可以建立非同步任務,並且將其執行結果儲存在future中,我們可以在外面從future中取值。
async原型:async(std::launch::async | std::launch::deferred, f, args...)
第乙個引數是執行緒建立策略:
第二個引數是執行緒要執行的函式,之後的引數是往執行緒執行函式中傳遞的引數。
void test_async());
//策略2
std::futurefut2 = std::async(std::launch::deferred, () );
std::cout << "result:" << fut.get() << std::endl;
this_thread::sleep_for(chrono::milliseconds(2000));
std::cout << "result:" << fut2.get() << std::endl;
}
C 11之多執行緒 unique lock詳解
目錄 1.unique lock取代lock guard 2.unique lock的第二個引數 2.1 std adopt lock 2.2 std try to lock 2.3 std defer lock 3.unique lock的成員函式 3.1 lock 加鎖 3.2 unlock 解...
C 11 多執行緒 執行緒管理基礎
c 11 所有的執行緒都封裝在標頭檔案中,使用命名空間std說明。最簡單的例子 include include void hello intmain 每個執行緒都必須有乙個初始函式,新執行緒在函式中執行。join 的作用是等待執行緒執行完畢,然後向下執行。該例子中,如果沒有join,那麼可能出現主線...
C 11 多執行緒
新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...