真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++11中std::async如何使用-創(chuàng)新互聯(lián)

C++11中std::async如何使用,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

站在用戶的角度思考問題,與客戶深入溝通,找到魏縣網(wǎng)站設(shè)計(jì)與魏縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋魏縣地區(qū)。

std::async有兩個(gè)版本:

1.無需顯示指定啟動(dòng)策略,自動(dòng)選擇,因此啟動(dòng)策略是不確定的,可能是std::launch::async,也可能是std::launch::deferred,或者是兩者的任意組合,取決于它們的系統(tǒng)和特定庫實(shí)現(xiàn)。

2.允許調(diào)用者選擇特定的啟動(dòng)策略。

std::async的啟動(dòng)策略類型是個(gè)枚舉類enum class launch,包括:

1. std::launch::async:異步,啟動(dòng)一個(gè)新的線程調(diào)用Fn,該函數(shù)由新線程異步調(diào)用,并且將其返回值與共享狀態(tài)的訪問點(diǎn)同步。

2. std::launch::deferred:延遲,在訪問共享狀態(tài)時(shí)該函數(shù)才被調(diào)用。對(duì)Fn的調(diào)用將推遲到返回的std::future的共享狀態(tài)被訪問時(shí)(使用std::future的wait或get函數(shù))。

參數(shù)Fn:可以為函數(shù)指針、成員指針、任何類型的可移動(dòng)構(gòu)造的函數(shù)對(duì)象(即類定義了operator()的對(duì)象)。Fn的返回值或異常存儲(chǔ)在共享狀態(tài)中以供異步的std::future對(duì)象檢索。

參數(shù)Args:傳遞給Fn調(diào)用的參數(shù),它們的類型應(yīng)是可移動(dòng)構(gòu)造的。

返回值:當(dāng)Fn執(zhí)行結(jié)束時(shí),共享狀態(tài)的std::future對(duì)象準(zhǔn)備就緒。std::future的成員函數(shù)get檢索的值是Fn返回的值。當(dāng)啟動(dòng)策略采用std::launch::async時(shí),即使從不訪問其共享狀態(tài),返回的std::future也會(huì)鏈接到被創(chuàng)建線程的末尾。在這種情況下,std::future的析構(gòu)函數(shù)與Fn的返回同步。

std::future介紹參考:/tupian/20230522/pp "future.hpp"#include #include #include #include #include #include #include #include #include #include #include #include #include namespace future_ { ///////////////////////////////////////////////////////////// reference: http://www.cplusplus.com/reference/future/async/int test_async_1(){ auto is_prime = [](int x) { std::cout << "Calculating. Please, wait...\n"; for (int i = 2; i < x; ++i) if (x%i == 0) return false; return true; };  // call is_prime(313222313) asynchronously: std::future fut = std::async(is_prime, 313222313);  std::cout << "Checking whether 313222313 is prime.\n"; // ...  bool ret = fut.get(); // waits for is_prime to return if (ret) std::cout << "It is prime!\n"; else std::cout << "It is not prime.\n";  return 0;} ///////////////////////////////////////////////////////////// reference: http://www.cplusplus.com/reference/future/launch/int test_async_2(){ auto print_ten = [](char c, int ms) { for (int i = 0; i < 10; ++i) {  std::this_thread::sleep_for(std::chrono::milliseconds(ms));  std::cout << c; } };  std::cout << "with launch::async:\n"; std::future foo = std::async(std::launch::async, print_ten, '*', 100); std::future bar = std::async(std::launch::async, print_ten, '@', 200); // async "get" (wait for foo and bar to be ready): foo.get(); // 注:注釋掉此句,也會(huì)輸出'*' bar.get(); std::cout << "\n\n";  std::cout << "with launch::deferred:\n"; foo = std::async(std::launch::deferred, print_ten, '*', 100); bar = std::async(std::launch::deferred, print_ten, '@', 200); // deferred "get" (perform the actual calls): foo.get(); // 注:注釋掉此句,則不會(huì)輸出'**********' bar.get(); std::cout << '\n';  return 0;} ///////////////////////////////////////////////////////////// reference: https://en.cppreference.com/w/cpp/thread/asyncstd::mutex m; struct X { void foo(int i, const std::string& str) { std::lock_guard lk(m); std::cout << str << ' ' << i << '\n'; } void bar(const std::string& str) { std::lock_guard lk(m); std::cout << str << '\n'; } int operator()(int i) { std::lock_guard lk(m); std::cout << i << '\n'; return i + 10; }}; template int parallel_sum(RandomIt beg, RandomIt end){ auto len = end - beg; if (len < 1000) return std::accumulate(beg, end, 0);  RandomIt mid = beg + len / 2; auto handle = std::async(std::launch::async, parallel_sum, mid, end); int sum = parallel_sum(beg, mid); return sum + handle.get();} int test_async_3(){ std::vector v(10000, 1); std::cout << "The sum is " << parallel_sum(v.begin(), v.end()) << '\n';  X x; // Calls (&x)->foo(42, "Hello") with default policy: // may print "Hello 42" concurrently or defer execution auto a1 = std::async(&X::foo, &x, 42, "Hello"); // Calls x.bar("world!") with deferred policy // prints "world!" when a2.get() or a2.wait() is called auto a2 = std::async(std::launch::deferred, &X::bar, x, "world!"); // Calls X()(43); with async policy // prints "43" concurrently auto a3 = std::async(std::launch::async, X(), 43); a2.wait();           // prints "world!" std::cout << a3.get() << '\n'; // prints "53"  return 0;} // if a1 is not done at this point, destructor of a1 prints "Hello 42" here ///////////////////////////////////////////////////////////// reference: https://thispointer.com/c11-multithreading-part-9-stdasync-tutorial-example/int test_async_4(){ using namespace std::chrono;  auto fetchDataFromDB = [](std::string recvdData) { // Make sure that function takes 5 seconds to complete std::this_thread::sleep_for(seconds(5)); //Do stuff like creating DB Connection and fetching Data return "DB_" + recvdData; };  auto fetchDataFromFile = [](std::string recvdData) { // Make sure that function takes 5 seconds to complete std::this_thread::sleep_for(seconds(5)); //Do stuff like fetching Data File return "File_" + recvdData; };  // Get Start Time system_clock::time_point start = system_clock::now();  std::future resultFromDB = std::async(std::launch::async, fetchDataFromDB, "Data");  //Fetch Data from File std::string fileData = fetchDataFromFile("Data");  //Fetch Data from DB // Will block till data is available in future object. std::string dbData = resultFromDB.get();  // Get End Time auto end = system_clock::now(); auto diff = duration_cast (end - start).count(); std::cout << "Total Time Taken = " << diff << " Seconds" << std::endl;  //Combine The Data std::string data = dbData + " :: " + fileData; //Printing the combined Data std::cout << "Data = " << data << std::endl;  return 0;} } // namespace future_

關(guān)于C++11中std::async如何使用問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


網(wǎng)站題目:C++11中std::async如何使用-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://weahome.cn/article/dphcdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部