1

我正在尝试用 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 也可能是一个线程。

谢谢和最良好的祝愿,

本。

4

1 回答 1

0

您正在实施观察者模式

我的事件调度程序设计有什么问题?

您调用在事件处理程序中触发事件的方法的事实。您通过不调用该方法来修复它。

于 2012-05-23T09:16:19.580 回答