powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / События в c++
25 сообщений из 46, страница 1 из 2
События в c++
    #38612999
La France
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Появился вопрос: можно ли создавать в c++ свои события. Например у меня есть объект, мне нужно, чтобы при изменении его имени у меня возникало событие, которое я мог бы обработать.

Спасибо!
...
Рейтинг: 0 / 0
События в c++
    #38613001
La France
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приложение консольное, ос - ubuntu
...
Рейтинг: 0 / 0
События в c++
    #38613013
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
La FranceЗдравствуйте!

Появился вопрос: можно ли создавать в c++ свои события. Например у меня есть объект, мне нужно, чтобы при изменении его имени у меня возникало событие, которое я мог бы обработать.


boost::signal курим

В линуксе можно ещё задействовать POSIX signal курим

В Qt есть своё сигнально-слотовое хозяйство.
...
Рейтинг: 0 / 0
События в c++
    #38613057
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
La Franceможно ли создавать в c++ свои события. Например у меня есть объект, мне
нужно, чтобы при изменении его имени у меня возникало событие, которое я мог бы
обработать.
Любое событие это не более чем callback, который вызывается в некоторой ситуации. Поэтому
- да, события создавать можно. Достаточно инкапсулировать код изменения имени чтобы
избежать его дублирования и заставить его (код) вызывать данный callback при изменении
имени. Всё тривиально.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
События в c++
    #38613073
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВсё тривиально.


А как с многопоточностью и асинхронностью быть?
...
Рейтинг: 0 / 0
События в c++
    #38613074
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
luislomА как с многопоточностью и асинхронностью быть?
Объявить, что обработчик события всегда вызывается в контексте потока вызвавшего событие и
забыть. Пусть у его писателя голова болит о синхронизации (если таковая вообще требуется).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
События в c++
    #38613081
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОбъявить, что обработчик события всегда вызывается в контексте потока вызвавшего событие и
забыть. Пусть у его писателя голова болит о синхронизации (если таковая вообще требуется).


А как быть с паттерном производитель-потребитель?
Как быть с паттернами Диспетчер, Казначей ( не знаю как он там у академиков, я его так называю),
и т.д. Ведь если обрабатывать сигнал в том же потоке, в котором он генерится, то он, сигнал, вообще тогда
в рог не упёрся.
...
Рейтинг: 0 / 0
События в c++
    #38613096
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
luislomА как быть с паттерном производитель-потребитель?
Оставить их витающим в облаках теоретикам и спуститься на грешную землю, поближе к железу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
События в c++
    #38613110
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Оставить их витающим в облаках теоретикам и спуститься на грешную землю, поближе к железу.


Зря Вы так. Нет, конечно, для всяких гаджетов с ведроидом или яблокачалкабаблОС
оно всё является фантазиями теоретиков, но для нагруженных сетевых сервисов,
например, исполняющихся на машинах с 16-ю ядрами-очень даже в тему.

И да, если у ТС однопоточное десктоп приложение, то про сигналы лучше не думать.
Но поиграться с ними прикольно.
...
Рейтинг: 0 / 0
События в c++
    #38613166
La France
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovДостаточно инкапсулировать код изменения имени чтобы
избежать его дублирования и заставить его (код) вызывать данный callback при изменении
имени.

Можно подробней об этом? callback я могу написать, но мне интересно как заставить его сработать при изменении имени.
...
Рейтинг: 0 / 0
События в c++
    #38613200
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
La Francecallback я могу написать, но мне интересно как заставить его сработать при
изменении имени.
Примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
void TMyClass::setName(const char* value)
{
	// тут собственно меняем имя
	if (OnNameChangeEvent) // если какой-то чудик хочет получать уведомления
		OnNameChangedEvent(любые параметры тут); // уведомим его
}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
События в c++
    #38613829
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
La FranceПоявился вопрос: можно ли создавать в c++ свои события. Например у меня есть объект, мне нужно, чтобы при изменении его имени у меня возникало событие, которое я мог бы обработать.

Нет нельзя. В С++ нет таких language keywords как события (events). Вот если-бы
мы обсуждали C# или Objective C - то другое дело.

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

Отдельный вопрос - библиотеки графики. В них есть зарезервированные имена типов (классов) событий.
Можно было-бы посмотреть как реализованы обработки контролов в Win32 GDI или GTK. Но ты заведомо
не указал графическую библиотеку и отметил что приложение - консольное. Ограничил нас.
Видимо так надо.
...
Рейтинг: 0 / 0
События в c++
    #38613832
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМожно было-бы посмотреть как реализованы обработки контролов в Win32 GDI или
GTK.
За GTK не скажу, а в Win32 GDI Window Function - тот же "плоский callback с параметрами"
указываемый классу или отдельному окну при создании.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
События в c++
    #38613873
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНет нельзя. В С++ нет таких language keywords как события (events). Вот если-бы
мы обсуждали C# или Objective C - то другое дело.

Те примеры которые тебе приводят в топике - не имеют никакого отношения к событиям. В любом другом
контексте в них невозможно распознать "обработчик" или "событие". В них - просто плоский код.
Просто callback с параметрами. Ага. То есть есть колбеки а есть события.
В колбеках код плоский, а в событиях он ...бугорчатый, да?
И вызывается обработчик события при помощи магии и заклинаний.
...
Рейтинг: 0 / 0
События в c++
    #38614036
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про зарезервированные имена типов (классов) я уже упомянул.
...
Рейтинг: 0 / 0
События в c++
    #38614569
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПро зарезервированные имена типов (классов) я уже упомянул.И что? Если в языке нету специального ключевого слова, то значит в нем уже нельзя сделать события?
...
Рейтинг: 0 / 0
События в c++
    #38614721
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlmaytonПро зарезервированные имена типов (классов) я уже упомянул.И что? Если в языке нету специального ключевого слова, то значит в нем уже нельзя сделать события?
Невозможно доказать что это событие.
...
Рейтинг: 0 / 0
События в c++
    #38614726
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНевозможно доказать что это событие.
Для опознания "события" необходимы такие признаки как нимб над головой и умение ходить по
воде?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
События в c++
    #38614727
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНевозможно доказать что это событие."Бремя доказательства лежит на обвиняющей стороне"
...
Рейтинг: 0 / 0
События в c++
    #38615000
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
luislomВ линуксе можно ещё задействовать POSIX signal курим

Совсем не для этого они предназначены, учитывая, что стандартная реакция на такой сигнал -- завершение программы.
...
Рейтинг: 0 / 0
События в c++
    #38615062
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZСовсем не для этого они предназначены, учитывая, что стандартная реакция на такой сигнал -- завершение программы.

Может, прежде чем эксперта включать, изучите POSIX сигналы, возможности их
применения и предназначение.

Для затравки (на каком курсе учитесь, предпоследнем?) напишите:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include <stdio.h>
#include <signal.h>

void sig_h(int a){ printf("YES  \n"); };

int main(){
signal(SIGINT, sig_h);
 while(1){

 usleep(100);

  };
}


Запустите, а в другой консоли делайте

Код: powershell
1.
kill -s sigint pid_of_proc



И снизайдёт да просветление, и да прибудет с Вами сила.
...
Рейтинг: 0 / 0
События в c++
    #38616259
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wikiВ информатике и программировании событие — это сообщение программного обеспечения (либо его части), которое указывает, что произошло.

Ряд протоколов, таких, как MIDI, событийно-обоснованы. См. также Оконные сообщения.

О событии в UNIX, Unix-подобных и других POSIX-совместимых операционных системах процесс асинхронно уведомляется сигналом (один из способов взаимодействия между процессами).

Событие (примитив синхронизации). Используется в Windows для реализации взаимодействия потоков.



В моём понимании событие это нечто более сложное чем callback. Должна быть "среда" где события
ходят. Событие должно существовать независимо от процесса его продившего. И событие может
быть принято (перехвачено) несколькими подписчиками (процессами или потоками или приложениями).

Вышеуказанный пример на С++ в моём IMHO не подходит под эти критерии.

Вот как-то так вобщем.
...
Рейтинг: 0 / 0
События в c++
    #38616292
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, Dimitry Sibiryakov . Выше я попытался вам ответить.
...
Рейтинг: 0 / 0
События в c++
    #38616330
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, по-моему все гораздо проще, чем в тут все себе это представляете.


авторПоявился вопрос: можно ли создавать в c++ свои события.

Нет, в C++ нет такой концепции, нет поддержки событий. Чтобы ее реализовать, нужно использовать какие-то библиотеки, реализующие подобную концепцию.



автор Например у меня есть объект, мне нужно, чтобы при изменении его имени у меня возникало событие, которое я мог бы обработать.



Это pattern "Subject - Observer" из GoF.
...
Рейтинг: 0 / 0
События в c++
    #38616423
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ моём понимании событие это нечто более сложное чем callback. Должна быть
"среда" где события ходят. Событие должно существовать независимо от процесса его
продившего. И событие может быть принято (перехвачено) несколькими подписчиками
(процессами или потоками или приложениями).
Это абстрактно-высокоуровневая терминология класса паттернов. Когда дело доходит до
конкретного кода, всё всегда вырождается в колбэки, статические или динамические.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / События в c++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]