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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Правильный стиль программирования  (Прочитано 3798 раз)
billidean
Гость
« : Февраль 15, 2016, 16:23 »

Добрый день всем.

Пишу программу управления процессом работы внешних устройств.
У меня в программе (пишу на Qt, естественно Улыбающийся) есть такой момент: по нажатию кнопки происходит выполнение очень длинной последовательности действий: инициализация внешнего железа, запуск неких калибровочных процессов, движение неких движков, ...., при этом каждый раз происходит ожидание завершения каждого из действий (с таймаутами, конечно же).
Пока все  было в процессе срочного написания и отладки с требованием "лишь бы поскорее заработало, а причешем прогу потом", поэтому писал путем накидывания кода в один обработчик кнопки. НО, пришло время причесывать прогу и встал БОЛЬШОЙ вопрос, в каком стиле пишут такие длинные процедуры?? (текущая составила 750 строк кода).
Думаю просто разбить на некоторое количество функций и вызывать их последовательно.

Но как-то немного засомневался, правильно ли я запланировал В замешательстве В замешательстве

Если у кого-нибудь есть опыт написания подобных длинных процедур, прошу наставить на путь истинный.
Записан
Bepec
Гость
« Ответ #1 : Февраль 15, 2016, 17:27 »

Процедуру в другой поток кинуть, вместо условий на выход, делаем сигнал состояния.
Основной поток лишь запускает и потом через сигналы смотрит состояние.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Февраль 16, 2016, 09:40 »

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

Это и будут ваши разбиения на более маленькие функции. Не сомневайтесь Улыбающийся
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #3 : Февраль 16, 2016, 10:14 »

"лишь бы поскорее заработало, а причешем прогу потом"

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

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Февраль 16, 2016, 10:27 »

...и встал БОЛЬШОЙ вопрос, в каком стиле пишут такие длинные процедуры?? (текущая составила 750 строк кода).
Думаю просто разбить на некоторое количество функций и вызывать их последовательно.
Вы сами почувствуете удачность этого решения по тому "насколько хорошо разбивается". Если ф-ции выходят по 2-3 аргумента - то все норм, наверняка удастся даже код сократить. А вот если "колбаса" с 5 и более параметрами - значит что-то "не то"
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Февраль 16, 2016, 11:44 »

Ну и куда же без этого
Записан
Vamireh
Гость
« Ответ #6 : Февраль 16, 2016, 18:48 »

Пишу подобные программы (правда, давно на C# перешел). Будет ли меняться последовательность действий?

В любом случае, лучшее, что я нашел для себя - это записать все действия в виде понятных человеку скриптов, а потом тупо их выполнять. Создается интерфейс (то есть, тьфу, абстрактный класс), у которого методы типа:
  • Exec(Command command)
  • Stop()
  • Quit()

Реализуются классы для управления всеми вашими устройствами. А интерпретатор этих скриптов построчно читает скрипт и запускает Exec() для текущей команды. Методы Stop() и Quit() нужны для приостановки (кнопка Пауза) или остановки (кнопка Закончить).

В общем как-то так, лень писать. Еще придется парсер писать и т.д.

EDIT: еще могу добавить, что по такому принципу управляются десяток устройств с временем выполнения одного скрипта до 5-7 суток непрерывной работы.
« Последнее редактирование: Февраль 16, 2016, 18:51 от Vamireh » Записан
popper
Гость
« Ответ #7 : Февраль 16, 2016, 19:31 »

Когда-то сам для решения подобной задачи пытался освоить QStateMachine однако терпения не хватило В замешательстве
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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