Вверх ↑
Ответов: 1291
Рейтинг: 47
#1: 2013-06-14 16:28:45 ЛС | профиль | цитата
CriDos, благодарю за совет, но как быть если глюк появляется только когда потоки работают параллельно? И причем появляется нестабильно, то есть, то нет. Ну запущу я схему без потоков, она будет нормально работать. Верну на место один поток, второй и тд. - все будет нормально работать, пока схеме не вздумается опять глюкнуть.)) Как быть в этих случаях трудноуловимых багов? Но мне кажется гордиев узел разрублен - просто надо все потоки при закрытии программы закрывать принудительно методом doStop. сейчас я вам покажу своего монстра с потоками. Тут и шифрование кода не нужно, сам черт ногу сломит ничего не разберет

scheme.png
------------ Дoбавленo в 16.08:
Это только половина схемы, и много потоков сидят в контейнерах и их не видно.)
------------ Дoбавленo в 16.12:
Когда нужно что-то изменить в схеме - приходится вспоминать для чего тот или иной элемент, отслеживать откуда идет линк и что он делает, потому что запомнить нереально. Хорошо хоть контейнеры подписаны.. Но ничего. Даже прикольно, и чувствуешь себя победителем, нет, даже Воином Кода (кстати, мой второй ник - я сражаюсь с Кодом и с помощью Кода ) когда монстр начинает слушаться команд.))
------------ Дoбавленo в 16.28:
Я понял в чем причина путаницы и как навести порядок. Нужно просто всю логику строить через 2 длинных хаба. Первый - передает событие onCreate формы, второй - OnClose. Чтоб модули запускались строго последовательно. А не как сейчас - результаты работы одной части схемы или модуля - запускают другую часть схемы или модуль, что в сочетании с потоками - наверное ужасный стиль программирования и хаос.

А если делать все через хабы - то задача поиска сбойного при закрытии модуля сводится к вызове в каждом модуле процедуры записи своей метки в лог, инициируемой событием OnClose и передаваемой через хаб последовательно во все модули, пока проблемный не обнаружит себя.

То есть, как только захочется использовать событие с выхода другого модуля - надо бить себя по рукам (лучше по голове) - и использовать событие с хаба. А с модулей - брать только данные с нижних точек. Тогда все будет идеально последовательно. Для организации задержек, пока модуль обрабатывет данные и они не готовы - использовать таймеры.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
файлы: 1scheme.png [73.6KB] [433]