C ++ 11には、それは私たちが簡単に非同期的に時間のかかるタスクの実装を実現し、必要なときに結果を取得することができます、<未来>ヘッダ・ファイルに含まれている非同期タスクの高レベルの抽象化を提供します。
私はいくつかの例を引用する:
1.一括コピー/ダウンロードファイルを、
2複雑な計算;
3.複数のネストされたSQLクエリを実行し、
実際の開発では、コンピュータはこれらの操作を実行し、あなたが特定の必要時間後に結果を返すために、今回は非同期を使用する必要があります。直接比較はstd ::スレッド、STDを使用して比較::非同期とstd ::将来は、次のような利点があります。
1.stdを::今後の非同期オブジェクトを簡単に呼び出し可能オブジェクトの実装が完了するのを待って、その戻り値を得ることができ、返された。
2 。ライブラリからいくつかの高度な機能は、スレッドプールのような利点を達成し、大幅に異常の発生を低減します。
私たちは、実際のコードの例を見て将来:
#include <iostreamの> する#include <将来> の#include <クロノ> BOOL is_prime(INT X) { ため(int型 I = 2、iはX <; iは++ ) { 場合(私は==のx%0 ) を返す偽。返す真; } } int型のmain() { のstd ::将来 < BOOL > FUT = STD ::非同期(is_prime、4444444444444444443 )。 std :: coutのは、 << " チェック、待って" 。 std ::クロノ::ミリ秒のスパン(10 )。 しばらく(fut.wait_for(スパン)== のstd :: future_status ::タイムアウト) のstd :: coutの << " 。「 << はstd ::フラッシュ。 ブール値のx = FUT。取得(); std :: coutの << " \ n4444444444444444443 " <<(xは?" で":" ではありません")<< " プライム\ nは" ; リターン 0 ; }
std ::未来は非同期タスクの結果を得るために使用することができるので、あなたは、スレッド間の同期の簡単な手段として使用することができます。GETを呼び出すの共有状態に関連付けられているのstd ::通常、プロバイダによって作成された将来、あなたは非同期タスク、スレッドの共有状態にあるプロバイダの設定、STDのプロバイダを想像することができるプロバイダ::将来のオブジェクト値を取得する(通常は別のスレッドで)共有状態フラグの準備ができていない場合、その後のstd ::未来を呼び出す::現在の発信者をブロックします取得するプロバイダは、この時点で共有状態(共有状態の値を設定するまで、フラグは準備ができている)、のstd ::将来::戻り値または例外非同期タスクを(例外が発生した場合)を取得。
非同期関数は()のスレッドのように使用することができ、あなたはまた、スレッドを開始することができますが、機能はフォーカスが計算プロセスにならないように、オブジェクトが、将来のスレッドオブジェクトではありません返します。次に、スレッドと非同期コード間のコード変換を見て:
書式#include <iostreamの> の#include <スレッド> の#include <未来> 使用して名前空間はstdを、INTメイン(int型 ARGC、チャーCONST * ARGV []){ スレッドT([] {COUT << " ハロー" << ENDL;}); t.join(); リターン0 ; }
上記のコードは、と等価です。
書式#include <iostreamの> の#include <スレッド> の#include <未来> 使用して名前空間はstdを、INTメイン(int型 ARGC、チャーCONST * ARGV []){ オートF =非同期([] {COUT << " ハロー" << ENDL;}); f.wait(); リターン0 ; }