http://isocpp.org/std/status C++冬の時代を乗り越え 今まさに空前絶後の C++バージョンアップ ブーム C#のasync/awaitを意識 C++14 auto and decltype(auto) return types Generic lambdas (一部) C++17 (予定) Concurrency TS(?) Resumable functions and await (一部) 1つプロセス内の 複数プロセス間の 他リソース間の 処理 処理 処理 非同期処理 レスポンスタイム レスポンスタイ の向上 ムの向上 スループット向上 →「待たない」 並行処理 ex)DBからデータ ex)ディスクアクセ を取得するなど、 スの間に、CPUを マルチスレッドの 「非同期」でよ 利用する 効率的利用 く使われる例は →並列処理 これ 本日は、用語をこう定義して進めます 1 → 非同期処理 2 → 並列高速演算 1つプロセス内の 複数プロセス間の 他リソース間の 処理 処理 処理 非同期処理 レスポンスタイム レスポンスタイ の向上 ムの向上 スループット向上 →「待たない」 並行処理 ex)DBからデータ ex)ディスクアクセ を取得するなど、 スの間に、CPUを マルチスレッドの 「非同期」でよ 利用する 効率的利用 く使われる例は →並列処理 これ プロジェクト 種類 例 C++ 非同期処理 VC++ Windows Runtime 並列 高速演算 C++11 <future> 機能の例 std::thread / std::promise std::async C++/CX concurrency::task ppltasks.h DirectX C++AMP (GPGPU利用) amp.h concurrency::parallel_for_each stdio.h cout “Hello World!” endl auto cout “Hello World!” endl // 代入されたラムダを関数呼び出し [ ]( std::string const &str ) // 引数 { std::cout << str << std::endl; } // コード ( “Hello World!” ); // 呼び出し auto return auto auto plus( std::string( "Hello “ ), std::string( "World“ )); #include "stdafx.h“ #include <iostream> std::asyncと同じ形 #include <ppltasks.h> // <future>でもOK int main( ){ int num = 0; concurency::task<int>t01([ &num ](){ // taskで別タスク実行 ++ num; return( num ); // 非同期処理で返すものを設定 }); int result = t01.get(); // 同期を取る return( 0 ); } concurency:: <int 型は合わせること concurency:: concurency:: .then で返り値を 別のタスクに渡す どんどんつなげることが 可能 concurency::task<int> t([](){ return( 1 ); }).then([](int n){ return( ++n ); }).then([](int n){ return( ++n ); }) そういえばC#でも 似たような書き方 出来ましたね http://aka.ms/Icp591 #include <future> #include <pplawait.h> concurrency::task<void> my_proc(void) __resumable{ auto x = []() __resumable -> concurrency::task<void> { std::cout << “abc." << std::endl; }; __await x(); std::cout << “def." << std::endl; } int main() { auto task = my_proc(); task.wait(); } void App1::MainPage::my_btn_click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { task<StorageFile^>( KnownFolders::DocumentsLibrary->CreateFileAsync( my_txt->Text ,CreationCollisionOption::ReplaceExisting) ).then([this](StorageFile^ file) { my_btn_01->Content = "ファイル作成しました"; }); } concurrency::task<void> App1::MainPage::my_btn_click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)__resumable { auto file = __await file->CreateFileAsync( my_txt->Text, CreationCollisionOption::ReplaceExisting); my_btn_01->Content = "ファイル作成しました"; } App container ( package manifest ) UI controls ( XAML ) 相互互換のための C++言語拡張機能 (中間の変換無し) VSプロジェクト テンプレート C++/CX C++実装 Class (ネイティブ) App container ( package manifest ) UI controls ( XAML ) 他の Windows Runtimeと 非同期通信 C++/CX C++実装クラス (ネイティブ) concurrency::task Windows::Foundation::IAsyncActionなど concurrency::create_async 処理 利用クラス/アルゴリズム/メソッド 非同期タスク処理 concurrency::task 並列に分割した処理の concurrency::task_group concurrency::structured_task_group グルーピング タスク処理の継続 concurrency::task::then 非同期アクション IAsyncAction 非同期進行状況 IAsyncActionWithProgress<TProgress> 結果を返す非同期 IAsyncOperation<TResult> 結果も返すし進行 も判る IAsyncOperationWithProgress<TResult, TProgress> 処理 利用クラス 非同期タスク処理 concurrency::create_async この場合の.thenは、 UIスレッドに返している 別のスレッドプールを指定する ことも出来る http://msdn.microsoft.com/ja-jp/library/windows/apps/jj160321.aspx http://msdn.microsoft.com/ja-jp/library/windows/apps/hh750082.aspx http://www.aerospace.sd.tmu.ac.jp/hydrodynamics/main/colums/AMPinde x.html http://code.msdn.microsoft.com/windowsapps/Windows-8-Asynchronous08009a0d
© Copyright 2024 ExpyDoc