1

データベースにクエリを実行し、クエリを非同期に実行するオブジェクトを実装したいと考えています。

オブジェクト B を使用してクエリを実行するオブジェクト A があるとします。A は B の executeQuery メソッドを呼び出し、他の処理を開始します。B の ExecuteQuery メソッドは非同期で、quini A に対して非ブロッキングです。クエリの結果が準備できたら、コールバックで B から A に通知して、A が準備ができたときにのみ結果を読み取れるようにしたいと思います。

C ++ 11でこのメカニズムを実装する最良の方法は何ですか?

私は std :: async で試しましたが、 std :: future で結果を読み取る代わりに、 std :: future にすでに結果が含まれているときにコールバックを受け取りたいので、呼び出しがブロッカーになるのを避けます。

ありがとうございました

4

2 に答える 2

0

関数へのポインタを渡して実行することができます。

または std::async で std::future を使用します

wait の代わりに wait_for 関数を使用する必要があります。そして、結果が準備できているかどうかを確認します。

非同期関数の最後にアトミックブール値を設定することもできます。そして、メインスレッドでこのブール値を確認してください。

https://en.cppreference.com/w/cpp/thread/future/wait_for

于 2019-01-15T04:46:06.733 に答える