处理嵌套回调
Dealing with nested callbacks
我遇到了我需要处理嵌套回调的情况。请参阅Thing::process
功能。第二个g_thing.onAfterWalk()
回调将永远不会被打电话,因为父母一完成执行后会立即将其销毁。
Thing g_thing;
void Thing::walk(int32_t x, int32_t y) {
if (SYSTIME() > m_walkEndTime) {
// Still walking
return;
}
auto obj = g_thing.localObject();
auto walkDuration = obj->getWalkDurationTo(x, y);
[..]
m_walkEndTime = SYSTIME() + walkDuration;
[..]
// Walk finished. Run callback
if (m_afterWalk) {
m_afterWalk();
m_afterWalk = nullptr;
}
}
void Thing::onAfterWalk(std::function<void(void)>& callback) {
m_afterWalk = callback;
}
void Thing::process() {
[..]
// Store a callback and walk
g_thing.onAfterWalk([]() {
// Store another callback
// After walking to 4321, 4321 do something else.
// My actual problem... Callback within callback
g_thing.onAfterWalk([]() {
std::cout << "Walking finished.n";
});
// After walking to 1234, 1234 walk to 4321, 4321
g_thing.walk(4321, 4321);
});
g_thing.walk(1234, 1234);
}
如何处理这种嵌套回调?
我应该使用回调队列创建std::stack
吗?最好的方法是什么?
对我有用(对param至 onAfterWalk
进行了一些调整: const
,最后std::cout.flush()
)。您确定您不仅失去了Stdout中的输出吗?
#include <iostream>
#include <functional>
class Thing;
extern Thing g_thing;
class Thing
{
std::function<void(void)> m_afterWalk;
public:
void walk()
{
if(m_afterWalk)
{
m_afterWalk();
m_afterWalk = nullptr;
}
}
void onAfterWalk(const std::function<void(void)>& callback)
{
m_afterWalk = callback;
}
void process()
{
// Store a callback and walk
g_thing.onAfterWalk([]() {
// Store another callback
g_thing.onAfterWalk([]() {
std::cout << "Walking finished.n";
});
g_thing.walk();
});
g_thing.walk();
}
};
Thing g_thing;
int main(int argc, char *argv[])
{
g_thing.process();
std::cout.flush();
}
产生
$ g++ -pedantic -Wall -Werror test.cpp
$ ./a.out
Walking finished.
相关文章:
- 嵌套在类中时无法设置成员数据
- 无法访问嵌套类.类的使用无效
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 架构决策:返回std::future还是提供回调
- 在C++中搜索嵌套多映射值
- 在C++中将矢量转换为嵌套地图
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- C++嵌套if语句,基本货币交换
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 嵌套的匿名命名空间
- 了解嵌套循环打印星号图案
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- C++中嵌套在另一个 LinkedList 中的 LinkedList 整数上的回调函数问题
- LIBEV 非阻滞套接字连续调用回调
- 处理嵌套回调
- 执行方法调用时,有什么理由不C++中添加嵌套类/结构解析
- 在回调函数中使用zmq套接字