Нашел в интернете пример с использованием событий. Немогу пока понять
как это работает. Подскажите пожалуйста где почитать доходчиво о
событиях в C++.
Posted via RSDN NNTP Server 2.1 beta
14.01.08 17:18: Перенесено модератором из 'C/C++' — это вопрос по событиям в библиотеке Qt. Соответственно, поправил название, чтобы не смущать публику — Кодт
20.01.10 20:59: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, Vit1251, Вы писали:
V>Нашел в интернете пример с использованием событий. Немогу пока понять V>как это работает. Подскажите пожалуйста где почитать доходчиво о V>событиях в C++.
События и C++ — ортогональные вещи. Есть языконезависимое понятие «событие», и есть реализации на C++ и на других языках.
Если уяснишь для себя принцип, то с легкостью напишешь реализацию на любом языке.
Здравствуйте, Vit1251, Вы писали:
V>Добрый день!
V>Нашел в интернете пример с использованием событий. Немогу пока понять V>как это работает. Подскажите пожалуйста где почитать доходчиво о V>событиях в C++.
В стандартном С++ событий нет.
События есть либо в библиотеках расширения тип VCL от Борланд, либо в С++|CLI — это расширение С++ от Микрософт в дотнете.
С++|CLI — это почти C# в синтаксисе С++. Так что можешь читать и C#
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Vit1251, Вы писали:
V>Добрый день!
V>Нашел в интернете пример с использованием событий. Немогу пока понять V>как это работает. Подскажите пожалуйста где почитать доходчиво о V>событиях в C++.
Концептуально — это шаблон (паттерн) проектирования, известный в ООП под названием Наблюдатель (Observer). В разных языках эта концепция может быть реализована по-разному. В C#, например, механизм событий встроен в язык и основан на делегатах. В C++ можно использовать бустовскую реализацию boost_signals. Последние, кстати, прекрасно документированы (документация входит в состав библиотеки).
К сожалению, из твоего вопроса не совсем понятно, что именно тебе непонятно Неплохо было бы, если бы ты привел ссылку и сформулировал вопрос более конкретно.
--
Справедливость выше закона. А человечность выше справедливости.
rg45 пишет: > Здравствуйте, Vit1251, Вы писали: > > V>Добрый день! > > V>Нашел в интернете пример с использованием событий. Немогу пока понять > V>как это работает. Подскажите пожалуйста где почитать доходчиво о > V>событиях в C++. > > Концептуально — это шаблон (паттерн) проектирования, известный в ООП под названием Наблюдатель (Observer). В разных языках эта концепция может быть реализована по-разному. В C#, например, механизм событий встроен в язык и основан на делегатах. В C++ можно использовать бустовскую реализацию boost_signals. Последние, кстати, прекрасно документированы (документация входит в состав библиотеки). > > К сожалению, из твоего вопроса не совсем понятно, что именно тебе непонятно Неплохо было бы, если бы ты привел ссылку и сформулировал вопрос более конкретно.
В программировании в C++ под UNIX в библиотеке Xlib есть такая
замечательная штка как handler_event() он получаеться когда
данному окну приходит событие. Вот я никак понять немогу как
это организовано. Вроде понятно что просто метод вызываеться,
но как определяеться что именно этому классу и именно этому
экземпляру. Или при приходе события оно отправляеться всем
экземплярам — так это ж расточительно очень? Тут никаких ресурсов
не напасешься. Хотя вроде сталкивался в Qt с такой конструкцией как
connect_signal. Вот хочу поподробнее разузнать об устройстве этого
изнутри. С точки зрения концептуальной новизны и отличия вызова
просто функции по указателю.
Здравствуйте, Ka3a4oK, Вы писали:
KK>Сигналы и события вроде как разные концепции.
Не совсем. По дизайну Qt "сигнал" — это тип события (например, "нажатие левой кнопки мыши" или "получение фокуса"), и ему в классе обработчика ассоциируется "слот" — функция-обработчик. Только в отличие от многих других библиотек — назначения эти можно устанавливать в рантайме, что устраняет необходимость переопределения своими классами. Всё это "на пальцах", но общая идея должна быть ясна.
Здравствуйте, Vit1251, Вы писали:
V>В программировании в C++ под UNIX в библиотеке Xlib есть такая V>замечательная штка как handler_event() он получаеться когда V>данному окну приходит событие. Вот я никак понять немогу как V>это организовано. Вроде понятно что просто метод вызываеться, V>но как определяеться что именно этому классу и именно этому V>экземпляру.
Должно быть отображение (map AKA hash AKA dict) из ID окна, которое использует X-сервер, во внутренний ID библиотеки (проще всего — просто указателем). Ищи, где это отображение хранится, или просто поверь, что оно есть:)
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, Ka3a4oK, Вы писали:
KK>>Сигналы и события вроде как разные концепции.
N>Не совсем. По дизайну Qt "сигнал" — это тип события (например, "нажатие левой кнопки мыши" или "получение фокуса"), и ему в классе обработчика ассоциируется "слот" — функция-обработчик. Только в отличие от многих других библиотек — назначения эти можно устанавливать в рантайме, что устраняет необходимость переопределения своими классами. Всё это "на пальцах", но общая идея должна быть ясна.
Вы, наверно, не долго работали с QT. В Qt события и мыши и фокуса обрабатываются не через сокеты. Это спор о терминах, например статья из Википедии. Я должен был сказать, что это не совсем одинаковые концепции.