2011-12-15 10 views
13

私は「UI開発者」(私たち)と「C++開発者」(それら)で構成されるデスクトップアプリケーションチームで働いています。 C++開発者は、私たちがUIに表示するすべてのデータを取得し、IO、データベースアクセス、Web呼び出しなどを行います。C++用非スレッド非同期IOの紹介?

最近私たちはIOブロッキングUIスレッドもちろん、これに対する解決策はIOを非同期にすることです。しかし、C++開発者は、これは新しいスレッドを生成することによってのみ可能であると主張しています。

私はNode.jsなどから、async IOはスレッドを必要としないことを知っています。私は、Win32、おそらくMacsにイベントループがあることを知っています。しかし、私は非同期非スレッドIOを行うためのC++土地でどのようなソリューションが普及しているのか全く分かりません。 (たぶん、ノードの基礎となるlibuvのこと?)

は、いくつかの人気のライブラリ、またはいっそのチュートリアル記事への誰点は、私たちは私たちのC++開発者には、この概念を導入することができますすることはできますか?クロスプラットフォーム(PCとMac)のボーナスポイント。非同期非スレッドデータベースソリューションがある場合、私はSQLiteの使用が私たちの多くの問題の原因であると信じているので、さらに多くのボーナスポイントがあります。

+4

"_新しいスレッドを生成します。これは非常に高価です。"私はこの意見を多く見ます。そして、私はそれが「非常に高価」であることを知らないと言う必要があります。これは、特定のユースケースに大きく依存しており、追加のスレッドを避ける必要があるケースは、それらを受け入れるべき一般的なケースよりもはるかに小さいです。 – Chad

+0

Googleのアプリでは、ユーザーの電子ブックライブラリのすべてのファイルのプロパティを読み取る必要があります.1500ファイルを超える場合があります。 1500スレッドは受け入れられません。 – Domenic

+4

しかし、あなたはそれを1つのスレッドで行うことができます。 1500アイテムは非常に小さな作業キューです。 – Chad

答えて

11

Boost Asynchronous I/O (asio)。彼らはexcellent tutorialといくつかのexamplesを持っています。それはクロスプラットフォームです。

+1

私はそれを読んでもわかりませんでした。スレッドを使用していますか? – Domenic

+1

これは必要ありません。 WM_TIMERメッセージを使用し、 'boost :: asio :: io_service :: poll_one()'を使って非同期タスクスケジューラを実行することができます。 – Chad

+1

http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/overview/core/threads.html –

関連する問題