Обработка сообщений и всё такое
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 18.08.18 20:55
Оценка: +1 :)
Здравствуйте!

Вроде была уже тут такая тема, но я не смог найти, и к чему там пришли, тоже подзабыл

Так что побаяню

Почему сюда — потому что интересуют не абстрактные архитектуры, а плюсовые решения.

Я как-то отстал от жизни, привык один патерн использовать, меня в принципе устраивает, но может, научная мысль уже далеко ушла вперед?

Вот есть некая очередь сообщений/событий. Из неё они извлекаются и как-то обрабатываются.
Мне известны буквально только пара механизмов для реализации такого поведения. Например:

1) Qt. Там из очереди сообщений они извлекаются, где-то в каком-то ассоциативном массиве ищется объект, который подписался на событие, и его слот, и этот слот вызывается, всякие кастинги доп. данных сообщений производятся на основе метаинформации, полученной при помощи метакомпилера. Как-то так вроде, да?
Пользоваться в принципе удобно, но напрягает необходимость препроцессора, и неэффективность данного метода (и не надо мне рассказывать, что на современных системах это копейки )

2) В разных книжках читал, но никогда не использовал — в очередь кладутся уже объекты, которые знают сами, что надо делать (с методом virtual doJob() etc). Никогда не понимал этого. Либо я саму идею не понял правильно, либо что-то еще, но место, где генерируется событие, обычно же ничего не знает о том, как событие должно обрабатывается. Никогда не пробовал применить такой способ.

3) Виндовая очередь оконных сообщений и её обработка. Тут есть вариации: чистый WinAPI со своими message crackers из windowsx.h, WTL со схожим механизмом, MFC. С MFC плотно дела не имел, там вроде немного по другому — уже есть некая "карта" обработки сообщений, которая дергает виртуальные методы, которые переопределяются в пользовательском коде. Из плюсов — отсутствие какого-либо оверхеда вообще. Да и использовать вполне удобно, когда все кракеры уже написаны до нас.

Я в основном привык к последнему "виндовому" подходу, раньше как-то работал с разными протоколами обмена с различными устройствами, и вполне успешно применял его для обработки различных поступающих данных. Но из недостатков у такого подхода в наличии имеется активное использование препроцессора, и прочие грязные штуки — кастинги всего во всё и прочее всё такое.

Вот хочу узнать, как подобное можно красиво именно на плюсах реализовать. Хотелось бы обойтись без головоломных шаблонов, но наверно не получится

Дискасс, коллеги
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.