我正在尝试用 C++ 编写一个简单的事件调度程序。我对这个特殊的领域很陌生,所以请原谅我的无知。
对于调度过程,我有以下接口:
class listener
{
public:
virtual void triggerEvent(int id)=0;
};
然后合并它,我简单地实现它:
class A : public listener
{
public:
A();
void triggerEvent(int event);
.
.
.
B* b;
};
在有一个名为 listener_ 的侦听器指针指向 A 对象的类中,可以触发 A 中的事件,如下所示,
void B::method()
{
.
.
.
listener_->triggerEvent(DO_SOMETHING); // calling point
}
但现在的问题是,A 也有一个指向 B 对象的指针,这样当调用 A 的 triggerEvent 实现时,会再次调用 B::method(),即:
void A::triggerEvent(int id)
{
if(id==DO_SOMETHING)b->method();
}
这会导致递归问题。
理想情况下,我希望 B::method() 中的“调用点”立即从堆栈中释放。我该怎么做才能防止上述递归问题?我的事件调度程序设计有什么问题?我如何解决它?
编辑:上面显示的是一个非常极端的例子。在实际情况中,A 实际上可能是某个“控制线程”。然后,B 可能是一个单独的算法,需要在控制线程完成时指示控制线程,以便 A 可以继续进行进一步的操作。B::method 也可能是一个线程。
谢谢和最良好的祝愿,
本。