我有一個程序,我不能使用標準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);
}
現在我想知道我是否做對什麼用lambda表達式作爲異步回調是最好的方式。
編輯:添加預期的行爲代碼評論。 請參閱blub
的問題的可能解決方案的回答/評論。
那是含糊不清的。回答諸如「做X的最佳方式」這樣的問題很難。你可以使用lambdas作爲回調。還有什麼事情你需要知道? – jalf 2012-04-27 11:16:43
'blub'已經不存在了,在labda執行時對它的引用不應該是有效的,對嗎? – 2012-04-27 11:18:55
基本上,有趣的是,異步如何與對象的生命週期和範圍確定一起工作。我讀的所有信息都是通過使用lambda同步 - 無法找到任何異步。 – abergmeier 2012-04-27 11:19:54