Russian Qt Forum
Октябрь 01, 2024, 02:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с архитектурой приложения  (Прочитано 4779 раз)
Edynchik
Гость
« : Июль 17, 2013, 16:31 »

Добрый день! Возникла следующая проблема, экспериментальным путем доказано что моя архитектура не работает. Предложите, пожалуйста, альтернативу. В общем зада следующая. Есть канал из которого необходимо считывать информацию, и отображать на экране. Я ее решил следующим образом, создал класс формы,в нем еще два класса. Один для считывания из канала (отдельный класс, потому что каналов несколько) и класс отображения (графиков отображения может быть тоже несколько). Когда по таймеру из канала считалась информация посылается сигнал в форму у которого параметром выставлена необходимая для записи инфа. Класс отображения по таймеру выдает сигнал в форму - запрос информации. И форма соответственно обработав этот сигнал, передает сигнал содержащий данные для отображения. И все вроде отлично работало до момента работы деструктора: возникает ситуация в которой сигнал с запросом инфы для отображения уже послан,срабатывает деструктор класса отображения и соответсвенно рисовать уже некуда...как следствие крах. Что можно придумать?
Записан
Bepec
Гость
« Ответ #1 : Июль 17, 2013, 16:39 »

Это ваша тема про осциллографы? Что-то такое там было Улыбающийся

Переусложнённая у вас архитектура.

Моё видение:
1) класс главного окна приложения.
2) класс отображения графика.
3) класс приёма информации (мб даже в отдельном потоке Улыбающийся ).

Архитектура проста - 2)/3) существуют связками. Точнее 2) в конструкторе создаёт привязанный к себе 3).

3) получает информацию, отсылая сигналом данные в 2). 2) получает данные и отображает их.

При закрытии 2) сначала уничтожается  3) и после чего удаляется 2).

PS ох блин понаписал я Веселый самому бы потом понять.


Записан
Edynchik
Гость
« Ответ #2 : Июль 17, 2013, 16:45 »

Это ваша тема про осциллографы? Что-то такое там было Улыбающийся

Переусложнённая у вас архитектура.

Моё видение:
1) класс главного окна приложения.
2) класс отображения графика.
3) класс приёма информации (мб даже в отдельном потоке Улыбающийся ).

Архитектура проста - 2)/3) существуют связками. Точнее 2) в конструкторе создаёт привязанный к себе 3).

3) получает информацию, отсылая сигналом данные в 2). 2) получает данные и отображает их.

При закрытии 2) сначала уничтожается  3) и после чего удаляется 2).

PS ох блин понаписал я Веселый самому бы потом понять.




да все таже тема...пытался как то реанимировать, но бестолку...в ваших словах определенно есть логика...хм а есть еще тонкие моменты в будущем о которых можете предупредить...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #3 : Июль 17, 2013, 17:50 »

И все вроде отлично работало до момента работы деструктора: возникает ситуация в которой сигнал с запросом инфы для отображения уже послан,срабатывает деструктор класса отображения и соответсвенно рисовать уже некуда...как следствие крах. Что можно придумать?
можно добавить класс-менеджер, который будет перенаправлять сигналы в объект отображения если он существует
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #4 : Июль 17, 2013, 22:05 »

Я думаю, что вашу программу можно реанимировать спокойно и неспешно. Но увы, нужно это смотреть на работающем проекте Веселый
Записан
Edynchik
Гость
« Ответ #5 : Июль 18, 2013, 12:53 »

Это ваша тема про осциллографы? Что-то такое там было Улыбающийся

Переусложнённая у вас архитектура.

Моё видение:
1) класс главного окна приложения.
2) класс отображения графика.
3) класс приёма информации (мб даже в отдельном потоке Улыбающийся ).

Архитектура проста - 2)/3) существуют связками. Точнее 2) в конструкторе создаёт привязанный к себе 3).

3) получает информацию, отсылая сигналом данные в 2). 2) получает данные и отображает их.

При закрытии 2) сначала уничтожается  3) и после чего удаляется 2).

PS ох блин понаписал я Веселый самому бы потом понять.



изначально у меня так и было сделано, только пришлось от нее отказаться ввиду того, что информация из одного канала может понадобится нескольким классам отображения...т.е. я сделал сохранение данных из канала в классе формы...
« Последнее редактирование: Июль 18, 2013, 12:58 от Edynchik » Записан
Bepec
Гость
« Ответ #6 : Июль 18, 2013, 15:47 »

Ничто не мешает посылать второй сигнал допустим.

Но лучше тогда менеджера создавать.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Июль 18, 2013, 15:50 »

Ничто не мешает посылать второй сигнал допустим.

Но лучше тогда менеджера создавать.
Зачем? К одному сигналу могут быть привязаны стопитсот получателей.
Записан
Bepec
Гость
« Ответ #8 : Июль 18, 2013, 19:27 »

Потому что менеджер - это хорошо. А 100500 связанных сигналов - это плохо для отладки.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Июль 18, 2013, 19:51 »

Аргументы будут? Улыбающийся
Записан
Edynchik
Гость
« Ответ #10 : Июль 18, 2013, 20:00 »

Ничто не мешает посылать второй сигнал допустим.

Но лучше тогда менеджера создавать.
Не могли бы описать работу класса менеджера? То что управлять, понятно...а далее...
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Июль 18, 2013, 20:17 »

Не могли бы описать работу класса менеджера? То что управлять, понятно...а далее...
Хороший вопрос. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.153 секунд. Запросов: 23.