標準std::async
とスレッド機構を使用できないプログラムがあります。代わりに、私はそうのようなプログラムをコーディングする必要があります。lambdaを非同期コールバックとして使用する
void processor(int argument, std::function<void(int)> callback) {
int blub = 0;
std::shared_ptr<object> objptr = getObject();
// Function is called later.
// All the internal references are bound here!
auto func = [=, &blub]() {
// !This will fail since blub is accessed by reference!
blub *= 2;
// Since objptr is copied by value it works.
// objptr holds the value of getObject().
objptr->addSomething(blub);
// Finally we need to call another callback to return a value
callback(blub);
};
objptr = getAnotherObject();
// Puts func onto a queue and returns immediately.
// func is executed later.
startProcessing(func);
}
私は今、私はそれが正しいか、どのような非同期コールバックとしてラムダを使用する最善の方法があるやっているかどうかを知っていただきたいと思います。
EDIT:コードコメントに予想される動作を追加しました。 blub
の問題の解決方法については、回答/コメントを参照してください。
これはあいまいです。 「Xをやり遂げる最善の方法」などの質問に答えるのは難しいことです。あなたはコールバックとしてラムダを使うことができます。何を知る必要がありますか? – jalf
'blub'がなくなり、labdaが実行されたときにその参照が有効ではないはずです。 –
基本的には、非同期がオブジェクトの存続期間とスコープとどのように機能するかは興味深いでしょう。私が読んだすべての情報は、lambdas synchronousを使用していました - 非同期では何も見つかりません。 – abergmeier