我试图用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 ::方法也可能是一个帖子。
谢谢,并祝福,
本。
答案 0 :(得分:0)
您正在实施观察者模式。
我的事件调度员设计有什么不正确之处?
您调用触发事件处理程序内事件的方法。你通过不调用方法来修复它。