"Обработка событий в С++" - читать интересную книгу автора (Клюев Александр)

Пример

В примере создаются два класса обработчик и инициатор события, устанавливается связь между ними и иллюстрируется обработка события в нескольких объектах одновременно:

#include "stdafx.h"

#include "sigslot.h"


struct EventRaiser { // источник события

 signallt;const char*gt; event; // const char* – тип аргумента. может быть void

 void raise(const char *eventName) {

  printf("raising %s event\n", eventName);

  event.raise(eventName);

 }

} g_Raiser; // глобальный объект


struct EventHandler { // обработчик события

 const char *color;

 slot handler; // переходник

 void onEvent(const char *eventName) { // обработчик события

  printf("\t%s event handled in %s object\n", eventName, color);

 }

 EventHandler(const char *clr): color(clr) {

  handler.init(g_Raiser.event, onEvent, this); // установим связь

 }

};


int main(int argc, _TCHAR* argv[]) {

 EventHandler red("Red");

 g_Raiser.raise("Small"); // событие обработается в red

 {

  {

   EventHandler blue("Blue");

   g_Raiser.raise("Big"); // событие обработается в red и blue

  }

  EventHandler green("Green");

  g_Raiser.raise("Medium"); // событие обработается в red и green.

  // объект blue уничтожен, связь разорвана

 }

 return 0;

}