<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                Visual Studio 11增強支持的標準 C + + 11 現在支持此預覽的 Visual Studio 頭的 STL 中的新頭文件可以進行多線程編程和異步操作管理。 <thread>,<future>,<atomic>,<time>,<mutex>,<condition_variable>,<ratio>,<filesystem> 頭文件<thread>作為其名稱來創建和操作線程 ~~~ thread t( { cout << "ThreadID : " << std::this_thread::get_id() << endl; }); t.join(); ~~~ 這是傳遞給線程的類的構造函數的一種方法,而不是在這里我們使用Lambda 表達式中引入C + + 11Join ()方法,這是一個調用阻塞,使主線程等待,直到線程完成他的工作。如果要解耦變量的類型線程,線程在 Windows 那里?調用 的detach()方法,這樣做違背計劃的detach()方法,不會影響與線程句柄關聯的窗口 (CloseHandle)。因此可能是使用變量的 t 型線,舊 Windows API 通過檢索的本機句柄,但代碼將成為便攜式少得多。 ~~~ WaitForSingleObject(t.native_handle()._Hnd ,INFINITE); t.detach(); ~~~ 在線程, join ()方法是實質相同,上述代碼 (在 Windows 平臺) 。 很可能也與要檢索的可用使用hardware_concurrency()方法的虛擬處理器數目的線程 , ~~~ unsigned numLogicalProc=t.hardware_concurrency();? ~~~ 操作的線程,總是會對同步與保護的關鍵地區。頭<mutex>提供這種排斥同步對象相互示例的效果 注意,使用鎖來總是對性能的影響 ! ~~~ std::this_thread::sleep_for (chrono::seconds(1)); for(int i=0;i<10;i++) { m.lock(); cout << "ThreadID : " << std::this_thread::get_id() << ":" << i << endl; m.unlock (); } }); thread t2([&m]() { std::this_thread::sleep_for (chrono::seconds(1)); for(int i=0;i<10;i++) { m.lock (); cout << "ThreadID : " << std::this_thread::get_id() << ":" << i << endl; m.unlock(); } }); t1.join(); t2.join(); ~~~ 注意this_thread命名空間以檢索當前線程的標識號或時間類結合創建點的介紹. 它也是執行的可以控制對生產者/消費者下面的示例使用頭文件<condition_variable>,作為多個線程流。 注意到我們使消費者和生產者為互斥體,我們轉向方法wait()變量的類型condition_variable_any (它可能還使用condition_variable unique_lock <mutex>型,后者互斥體直接傳遞到類型unique_lock的初始化過程中未報告的狀態。非終止狀態指示可以獲得互斥體。) ~~~ mutex lockBuffer; volatile BOOL ArretDemande=FALSE; queue<long> buffer; condition_variable_any cndNotifierConsommateurs; condition_variable_any cndNotifierProducteur; thread ThreadConsommateur([&]() { while(true) { lockBuffer.lock (); while(buffer.empty () && ArretDemande==FALSE) { cndNotifierConsommateurs.wait(lockBuffer); } if (ArretDemande==TRUE && buffer.empty ()) { lockBuffer.unlock(); cndNotifierProducteur.notify_one (); break; } long element=buffer.front(); buffer.pop (); cout << "Consommation element :" << element << " Taille de la file :" << buffer.size() << endl; lockBuffer.unlock (); cndNotifierProducteur.notify_one (); } }); thread ThreadProducteur([&]() { //Operation atomic sur un long std::atomic<long> interlock; interlock=1; while(true) { ////Simule une charge std::this_thread::sleep_for (chrono::milliseconds (15)); long element=interlock.fetch_add (1); lockBuffer.lock (); while(buffer.size()==10 && ArretDemande ==FALSE) { cndNotifierProducteur.wait (lockBuffer); } if (ArretDemande==TRUE) { lockBuffer.unlock (); cndNotifierConsommateurs.notify_one (); break; } buffer.push(element); cout << "Production unlement :" << element << " Taille de la file :" << buffer.size() << endl; lockBuffer.unlock (); cndNotifierConsommateurs.notify_one (); } }); std::cout << "Pour arreter pressez [ENTREZ]" << std::endl; 68.getchar(); std::cout << "Arret demande" << endl; ArretDemande=TRUE; ThreadProducteur.join(); ThreadConsommateur.join(); ~~~ 在示例中,該互斥體將傳遞給無信號使用鎖() 方法。不過如果隊列為空 ,就可以開始在執行序列中執行。 此互斥體用來保護尾 <int> 緩沖區類型。等待() 方法使用另一種機制將這掛起,并將等待喚醒,制造者線程僅當它將調用它的方法notify_one()。 使用這里的元素類型,遞增 1 在單個原子操作中我們的隊列的元素。在多線程的上下文,另外,例如將總是公平的保證元素操作,而不是搶占式。 ? 頭文件<future>。未來用于執行異步操作的返回結果,要檢索后,沒有不同步或線程流量控制機制。示例中,作為互斥體的多個線程的交會點的方法 join () 和控制流對象。 事實上,假設您想要簡單的加法的兩個整數 A + B,但是來自兩個不同的線程所返回的結果。 在下面的示例中,作為不確定何時執行的概念 ? ~~~ std::cout << "Thread Principale : ID : " << std::this_thread::get_id() << endl; future<int> f1(async(->int { //Simule une charge std::this_thread::sleep_for (chrono::milliseconds (2000)); std::cout << "Future 1 ID : " << std::this_thread::get_id() << endl; return 42; })); future<int> f2(async(->int { std::cout << "Future 2 ID : " << std::this_thread::get_id() << endl; return 84; })); std::cout << "Resultat : " << f1.get () + f2.get() << endl ; ~~~ 在這里宣布int類型的兩個數值以異步類型作為參數的構造函數,它作為其名稱在不同的線程中執行異步操作的指示。 兩個未來將返回的結果,但不知道何時執行Get ()方法,這是一個調用中擔保兩個整數的增加會正確的范例。 在將來的VS11調用中,我們使用語法強烈靠近同步語法的異步執行。 ? 趕緊下載VS11體驗吧 [http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144](http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144) ?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看