Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
#1

Сигнал об обновлении данных - C++

14.06.2014, 07:51. Просмотров 185. Ответов 4
Метки нет (Все метки)

День добрый. Нужен совет.

Допустим у нас есть класс CS_Setting. И мы обновляем его даные в каком то модуле, допустим в майне. Как передать что данные обновленны в другие модули? Нужно что то похожее на сигналы и слоты из Qt. Тоесть при обновление данных в нутри класса вызывается связанная функция, не пренадлежащая классу.

У кого какие предложения и идее?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2014, 07:51     Сигнал об обновлении данных
Посмотрите здесь:

Определить, сигнал какого цвета сигнал горит для пешеходов в этот момент. - C++
3. Работа светофора для пешеходов запрограммирована следующим образом: в начале каждого часа в течение трех минут горит зеленый сигнал,...

Звуковой сигнал! - C++
#include <ctime> #include <stdio.h> #include <locale.h> #include <string> #include <conio.h> #include <windows.h> #include...

Сигнал SIGABRT - C++
Почему выдает SIGABRT вот код test.cpp: #include "obj.h" int main() { Obj hun("/home/nikita/untitled.obj"); ...

Входной сигнал - C++
Алгоритм обработки входной информации – алгоритм не рекурсивной цифровой фильтрации имеет вид: {y}_{n}=\sum_{i=0}^{K}{b}_{i}{x}_{n-1} ...

Сигнал-слот - C++
Всем привет. Хотел уточнить один факт, допустим дан код: Класс pole.h class pole : public QFrame { Q_OBJECT public: ...

Сигнал, Индекс массива - C++
Не получается задать сигнал // информационные символы double *x0 = new double; for (int q = 0;q < M; q++){ ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
14.06.2014, 08:10     Сигнал об обновлении данных #2
А в других модулях какие именно объекты должны знать об обновлении данных класса CS_Setting?

Можно создать некий интерфейс и реализовать его. Вызывать метод в классе, реализующем интерфейс, чтобы обновить данные в других модулях. Тут однако неясно, что именно обновлять в других модулях? Раскройте тему подробнее.
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
14.06.2014, 08:27  [ТС]     Сигнал об обновлении данных #3
Примерно так, но может есть более удачные мысли.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class CS_Setting{
    int d;
    void (* updateFun)();
    void updateNull(){return;}
public:
    CS_Setting(){d=0;updateFun=updateNull;}
    void setVariant(int date){d=date;updateFun();}
    int getVariant(){return d;}
    void setFunUpdate(void (*update)()){updateFun=update;}
};
 
void update(){
    //Тут обработка при получении сигнала
}
 
 
int main(int argc, char *argv[])
{
    CS_Setting a;
    a.setFunUpdate(update);
    a.setVariant(5);
    a.setVariant(5);
 
}
Добавлено через 8 минут
Задача по сути очень распространена, на Qt рещается навешиванием сигнала и припиской ему слотов. Надо при изменении настроек, эти самые настройки изменить. Например меняем количество проходов, а у нас вызывается функция и переинициализирует соответствующий класс на данное количество.

В реализации выши столкнулся с проблемой задания не одной а нескольких функций.
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
14.06.2014, 08:58     Сигнал об обновлении данных #4
Если есть несколько разных функций update[i], то передаете массив указателей на них. При обновлении данных при помощи setVariant() в цикле пробегите по этому массиву.

Добавлено через 5 минут
Вот пример с vector и двумя функциями update:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
using namespace std;
 
void upd1() {
    cout << "UPD 1 EPTA!\n";
}
 
void upd2() {
    cout << "UPD 2 EPTA!\n";
}
 
int main() {
    vector <void (*)()> v;
    
    v.push_back(upd1);
    v.push_back(upd2);
    
    v[0]();
    v[1]();
    
    return 0;
}
Можете аналогично запилить любую другую структуру данных.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2014, 09:01     Сигнал об обновлении данных
Еще ссылки по теме:

Звуковой сигнал биппера! (C++) - C++
Здравствуйте, у меня такая проблема, как заставить биппер подать голос! cout &lt;&lt; &quot;\a\a\a\a\a\a\a\a\a\a\a\a\a\a&quot; &lt;&lt;endl; Вроде все...

Не подается звуковой сигнал - C++
В общем, должен написать будильник, основную часть сделал, но не подается звуковой сигнал по наступлении заданного времени, скорее всего...

Звуковой сигнал при выводе символа - C++
Случайно наткнулся на такую вещь. Преобразую целое число(именно семерка) в символ и вывожу его при помощи cout. Программа компилится,...

Послать сигнал серверу о результатах поиска - C++
Доброй ночи. Вот хочу в свой код добавить, чтобы он после того как завершился поиск если он что то нашёл то посылал определённый сигнал...

Звуковой сигнал \a : как это работает в программировании? - C++
Как \a работает в программировании? Приведите пример плз.

Создать иерархию типов, описывает данные - сигнал - C++
Создать иерархию типов, описывает данные - сигнал, данные результат обработки и данные, как результат обработки сигнала и будучи сигнал....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
14.06.2014, 09:01  [ТС]     Сигнал об обновлении данных #5
RaiaNKnight спасибо за идею, я думаю лудше подойдет список. При уничтожении объектов будет проще удалять указатели. Только мой еле соображающий мозг не может придумать как организовать вызов функций из списка

Добавлено через 1 минуту
СПАСИБО
Yandex
Объявления
14.06.2014, 09:01     Сигнал об обновлении данных
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru