2011-10-03 23 views
7

特に 8(メトロ)では、のIOが非同期にに設定されている必要があります。 C#/ .Netには、特別なawaitとそのような構造があり、JavaScript APIはそのための独自の仕組みを持っているようです。C++ 11の非同期/先物をWindowsの非同期IOと組み合わせるのに最適なAPIは何ですか?

C++ 11の統合はこれになりますか?最近の(または今後登場する)Windowsの簡潔な例(例えば、ファイルを表示するための画像を読むなど)ですか?それがのC++ 11機能を使用している場合私はasyncまたはfutureが関係すると思いますか?

+0

非同期および/または将来はおそらく関与することはありません。 Windows 8の非同期のものは、PPLとタスクベースのプログラミングと協調的なブロック機能と統合されています。非同期と未来はスレッドベースとスレッドのブロックです。 – ronag

+0

ああ、PPLから、少なくとも聞いたことがある。 – towi

+0

@Pavelどのように表示されませんか? C++ 11 std :: futureにはset_wait_callbackがありません。このブロックでは、ブロック化実装を協調ブロックでオーバーライドすることができます。タスクベースのスケジューラでstd:futureを作成する唯一の方法は、ConcurTechスケジューラのConcurrency :: Oversubscribe(true)機能のオーバーヘッドを被ることです。私は何が欠けていますか? WinRTでは、std :: futureは勝利スレッドをブロックするだけでしょうか?これは、WinRTの仕組みではなく、協調ブロッキングを期待しているからです。 – ronag

答えて

4

Tips and tricks for developing Metro style apps using C++のプレゼンテーションでは59:13にこれを示しています。生のインターフェイスはコールバックオブジェクトを使用します。実際には、人々はPPLによって提供される単純化されたインターフェイスを使用する可能性が高いです。

1

Windows 8 asyncはおそらくPPLによって行われます。その詳細についてはhereを読むことができます。

私の理解では、Windows 8とPPLはタスクベースのスケジューリングと協調ブロッキングを使用しています。 std :: asyncとstd :: futureはスレッドベースのスケジューリングとプリエンプティブブロッキングを使用します。したがって互換性はありません。

+1

'std :: future'はタスクベースのスケジューリングのように思えます。 –

+1

そうですね。しかし、すべてのブロック機能は非協調的なので、タスクベースのスケジューラーにとっては不都合です。 – ronag

関連する問題