一旦对象“改变”,c ++就会做某事

时间:2011-11-27 14:17:00

标签: c++ object event-handling

我正在开发一个从外部USB设备读取MIDI数据的项目。我不想在这里过于具体,但这大概就是这样:

我将所有传入的MIDI事件堆叠在一个对象中,让我们称之为“in”。现在,为了从堆栈中获取下一个MIDI事件,我首先要检查“in”是否在堆栈中使用成员函数至少有一个事件。

有没有办法在新的时候自动处理堆栈上的所有事件,而不必每次都检查? 我正在考虑类似于事件监听器(抱歉,如果这听起来很愚蠢,我是初学者)。

2 个答案:

答案 0 :(得分:2)

  

有没有办法在新的时候自动处理堆栈上的所有事件,而不必每次都检查?我正在考虑类似于事件监听器(抱歉,如果这听起来很愚蠢,我是初学者)。

当您使用堆栈时,代码可能如下所示:

// producer
stack.push(midi_event);

// consumer
while(!stack.empty())
    process_event(stack.pop());

生成器可以保留指向消费者的指针(回调接口),而不是将堆栈用作通信队列,并将事件直接推送给消费者,如下所示:

// set-up the producer-consumer callback
Consumer consumer;
Producer producer(&consumer); // saves Consumer* into a member-variable
// start the event processing loop
while(producer_or_an_event_loop_object.wait_and_dispatch())
    ; // loop till wait_and_dispatch() returns false


// Producer::produce_event()
this->consumer->process_event(midi_event); 

Boost.signals库专为此类问题而设计,并且在此主题上有a nice tutorial

答案 1 :(得分:-3)

观察者模式就是为了这个目的。