Event Queue 模式

2017-08-14  本文已影响10人  薛云龙

Event Queue 设计模式

while (running)
{
  Event event = getNextEvent();
  // Handle event...
}

通过对getNextEvent()方法的调用,你将获取一个未处理的事件,并可以加上你对这个事件的处理方式.
但是问题来了,一系列事件推送过来时,怎么能保证事件不会被丢失,getNextEvent()这个方法是从什么地方获取这些已经推送过来的事件呢?

class Audio
{
public:
  static void playSound(SoundId id, int volume);
};

接着我们再来创建这个方法具体的实现:

void Audio::playSound(SoundId id, int volume)
{
  ResourceId resource = loadSound(id);
  int channel = findOpenChannel();
  if (channel == -1) return;
  startSound(resource, channel, volume);
}

最后来创建调度这个方法的菜单:

class Menu
{
public:
  void onSelect(int index)
  {
    Audio::playSound(SOUND_BLOOP, VOL_MAX);
    // Other stuff...
  }
};

完成上述内容之后,我们会发现当我们切换菜单的时候,有的一些 画面将会卡住,那么问题来了:

上一篇下一篇

猜你喜欢

热点阅读