|
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
|
|
ТЗ и первый шаг в правильном направление22.06.2018, 15:24. Показов 2439. Ответов 15
Метки нет (Все метки)
После темы на форуме решил с самого начало спросить как надо/лучше/правильнее делать чем потом переписывать то что не корректно написано.
ТЗ с описанием проблемы в общих чертах. Решение задачи должно быть на Windows service. При запуске сервиса происходит запуск около 10 самостоятельных потоков. Каждый поток работает по своему и со своими интерфейсами. Каждый из потоков время от времени генерирует событие (промежуток не постоянный). События обрабатываются 5-ю методами. (Например 3 потока запускают одно и тоже событие, другой поток запустит второе событие и т.д). Четкой привязки потоков к методам нету. Задача состоит в том чтобы события из разных потоков обрабатывалось поочерёдно (Чтобы одновременно не было обработки двух событий). Всё дело в том что каждый метод работает с одной и той же структурой, + DB + файлы на сервере. Допустить выполнения двух методов одновременно не допустимо. В другой ветки у меня была идея. Обработку всех событий реализовать в одном и том же потоке (Вся обработка делалась в GUI потоке), но знающие люди сказали что я не прав и лучше написать код с нуля и правильно. Вот с верху указанно ТЗ, с чего надо начать чтобы добиться выполнения ТЗ?
0
|
|
| 22.06.2018, 15:24 | |
|
Ответы с готовыми решениями:
15
Первый шаг Первый шаг в S7-Graph
|
|
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
|
||
| 22.06.2018, 17:03 [ТС] | ||
|
0
|
||
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
||
| 22.06.2018, 17:29 | ||
|
Собираешь по максимуму сведения о том, как программа должна работать и что делать. Максимальное количество "хотелок". Сводишь это в единый документ. Решаешь спорные моменты и взаимоисключающие пожелания. Определяешься с какими объёмами данных нужно работать. Определяешь все точки входа в систему, основные функциональные блоки (ВНИМАНИЕ! Не классы программы!). Определяешься к требованиям по производительности системы. Обязательно формулируешь необходимый функционал. Оформляешь всё это в виде ТЗ. Подписываешь у всех заинтересованных, чтобы потом никаких вопросов не было. Это всё нужно чтобы: 1) Структурировать всю информацию по программе у тебя самого в голове; 2) Собрать в одном месте все пожелания всех пользователей; 3) Обеспечить обоснование твоей занятости. Когда все требования к программе определены можешь начинать работать. Начать рекомендую с определения ключевой функции + минимальный интерфейс вокруг неё + логирование работы. Обязательно тестирование. Хотя-бы нагрузочное. Например. Запустить программу, подключить к ней 1000 клиентов и передать от них какие-то данные. Добавлено через 10 минут fufel, ещё. Планируй разработку так, чтобы она шла итерациями (в терминал Agile - спринт). Итерации непродолжительные не более пары недель. По окончании каждой итерации у тебя должен быть рабочий продукт, который можно запустить и продемонстрировать какой-то функционал. Соответственно на спринт надо определить список задач, которые можно реализовать за это время. Само-собой сначала получаться не будет, но с опытом и нарастанием "мяса" на скелет программы дело пойдёт. При решении каких-то задач не стесняйся делать прототипы - программы, которые реализуют техническое решение, которое хочешь применить с целью его проверки.
0
|
||
|
|
||
| 23.06.2018, 01:24 | ||
|
Хотя тут под вопросом, почему недопускается многопоточная обработка сообщений. Возможно вы создаете проблему из ничего, и достаточно просто лочить обьекты перед изменением.
0
|
||
|
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
| 23.06.2018, 10:21 | |
|
А во внерабочее время можно и по теме почитать:
https://blog.stephencleary.com... art-1.html Книжка там его на русском языке тоже в интернетах присутствует. И естественно, всё что связано. Особенно помогает Stephen Toube. Добавлено через 47 минут Товарищ на него ссылается на тему Rx (Reactive Extensions), ObservableCollection, асинхронное программирование: https://msdn.microsoft.com/ru-... 07526.aspx
0
|
|
|
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
|
||||
| 25.06.2018, 12:48 [ТС] | ||||
|
amr-now, - Тут явно надо садится за учебники, но как не крути на данный момент проблема осталась в таком виде в каком была. Резюме, буду учить но и искать в интернете решение данной задачи (Хотя и так ясно что задача уже поставлена через зад, но Рим не сразу построился, вот и я не сразу всё сделаю так как надо).
0
|
||||
|
|
||
| 25.06.2018, 13:43 | ||
|
Идея такая: - запускаете 10 потокв, и каждьій из них является паблишером в очередь. - запускаете отдельньій поток, которьій подписьівается на очередь. - просто синхроно дергаете каждое сообщение Такая схема позволит вам хоть на отдельньіе серваки разносить.
0
|
||
|
|
|
| 25.06.2018, 16:50 | |
|
0
|
|
| 25.06.2018, 17:06 | |
|
0
|
|
| 25.06.2018, 17:15 | |
|
0
|
|
|
|
|||||||||||
| 26.06.2018, 04:45 | |||||||||||
Сообщение было отмечено fufel как решение
Решение
В общем как-то так...
Для работьі нужно в винде в компонентах врубить MQ и подключить System.Messaging.dll (поставляется в стандартной сборк .net) Далее -- весть єтот ужас будет работать только в случае отсутствия обращения обработчика к состоянию паблишера ивента, т.е. когда через MQ гоняются исключительно данные. Если же нужно прям вот в одной RAM все вертеть, то возможно логичнее как-то так...
0
|
|||||||||||
|
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
|
|
| 26.06.2018, 12:49 [ТС] | |
|
Wolfdp,
1) Спасибо за пример, разбираясь в нём я я кое что понял что од этого слабо понимал. 2) При разборе что такое "MessageQueue" я нашел "Для создания очереди необходимы административные привилегии. Обычно нельзя рассчитывать, что пользователь приложения будет иметь их. Именно поэтому очереди обычно создаются программой установки." 3) Подумав дальше дошло что всё что я хотел не как иное как "event loop", "loop message" и Т.Д. Тоже самое что использует Windows form (с названием терминологии явно где то ошибся). Подскажите как правильно называется терминология (или методы) и пойду дальше искать. Или может что то уже есть готовое для изучение или самому писать Message loop?
0
|
|
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|
| 26.06.2018, 12:53 | |
|
0
|
|
|
|
||
| 26.06.2018, 18:19 | ||
|
0
|
||
|
20 / 20 / 6
Регистрация: 28.02.2011
Сообщений: 535
|
|
| 27.07.2018, 13:13 [ТС] | |
|
Всё пора подводить итоги и закрывать тему.
Когда я писал вопрос то я всё напитал и перепутал. Всё не так надо было делать. И с ТЗ был не так задан, и требования были не те. Проще говоря ворох лишних вопросов и в результате этого киш мищ в голове. Но итоге из всего этого я получил правильных уроков. Которые теперь учитываю Wolfdp, Спасибо тебе, твой ответ натолкнул меня на нужную идею. В течение трёх дней я переписал проект под новые требования не переписавая код (изменил 5% старого кода). И всё теперь работает. Всем спасибо, сорян если кому то потрепал нервы )))))
0
|
|
| 27.07.2018, 13:13 | |
|
Помогаю со студенческими работами здесь
16
первый шаг он трудный самый! Первый шаг - уже споткнулся первый шаг в Lotus Designer Явная и неявная схемы.Первый шаг
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|