std::async
標準のスレッドメカニズムを使用できないプログラムがあります。代わりに、次のようにプログラムをコーディングする必要があります。
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);
}
私は今、それを正しく行っているかどうか、またはラムダを非同期コールバックとして使用する最良の方法は何かを知りたいと思います。
編集:コードコメントに期待される動作を追加しました。の問題の可能な解決策については、回答/コメントを参照してくださいblub
。