mrumbert писал(а): Вроде как у цикла должно быть условие, а кольцевание до упора происходит? Давайте с самого начала. С базовых основ HiAsm. В "модели паровозиков", предположим. Вообразим себе, что каждый элемент это некоторая ЖД-станция со своими индивидуальными протоколами/спецификациями/расписанием жизнедеятельности. И эти станции соединены ЖД-путями, которые и отражают нашу схему. Спрашивается, как должна проистекать жизнь в этом воображаемом мире, чтобы это максимально соответствовало реально происходящему в наших кодах. Так вот, все начинается с некой станции, в протоколах которой прописана собственная активность - по одному из путей (правая или верхняя точка) отправляется паровозик, доставляющий некоторый груз (данные) другой станции (элементу). В протоколах большинства наших станций (элементов) не прописана собственная активность и находятся они в режиме ожидания. Но они все начинают жизнедеятельность по получении груза по одному из своих входов (левая или нижняя точка). Эта жизнедеятельность может быть незаметной (без внешних проявлений), а может быть достаточно бурной - станция начинает отправлять уже свой паровозик к другим станциям. Этот свой паровозик хоть и один, но может отправляться неоднократно, и по разным путям, передавая грузы другим станциям, или наоборот - получая их от других. В чем заключается главное заблуждение: представление о том, что по схеме бегает только один паровозик по путям, проложенным в схеме -- НЕПРАВИЛЬНОЕ. Все немного по другому. Их много, свой у каждой станции. Да, некоторая станция отправила паровозик на другую. И она ждет его обратно. И только когда он вернется, станция продолжит исполнять свой протокол (расписание, если хотите). А паровозик, который был отправлен, вовсе не путешествует далее по схеме, а стоит и ждет, пока его отпустит станция-адресат. Занимая путь, между прочим. А эта станция-адресат имеет свой паровозик, и свою жизнедеятельность отражает в том, что уже его (а не тот, который привез задание к исполнению) отправляет по путям в соответствии со схемой и своим расписанием. И этот паровозик тоже будет занимать путь, пока уже другие станции (погонявши по схеме свои паровозики) не отпустят его. Так вот, если какая-то станция отправит паровозик на уже занятый путь - будет крушение. Грубо говоря поведение схемы непредсказуемо. Может быть все что хочешь - просто неправильное поведение элемента, сопровождаемое вопросами на форуме; падение (типа AV) схемы; утечка памяти, как в Вашем случае. А иногда это и работает (у нас заложен некоторый запас прочности). Давайте посмотрим Вашу первую схему (как более простую), и обозначим последовательно занимаемые ЖД-пути: ODialog.onExecute -> Hub.onEvent2 -> Hub.onEvent2 -> StreamConvertor.onResult -> Charset.onCharset -> Str_Enum.onEndEnum -> Math.onResult -> Hub.onEvent2 <<-- Оппаньки, а этот путь уже занят, там ожидает окончания всего этого безобразия паровозик, второй из вышеозначенного списка. Вот так делать и нельзя. Если, конечно же - хочешь, чтобы оно работало. И такое столкновение паровозиков и называется КОЛЬЦЕВАНИЕМ. А ЦИКЛ - это когда в расписании ЖД-станции записано отправление паровозика по одному и тому же пути. Отправил - дождался возврата, и снова отправил. Снова дождался - и отправил опять. И т.д.. А уж количество отправлений, условие окончание, или бесконечный цикл - это второй вопрос. mrumbert писал(а): Как же сделать правильно в итоге? Применяя элементы, которые умеют делать цикл. К примеру, в одном потоке (там же смотри "оживление формы"): Можно и Thread применить (работать в два потока), он тоже стреляет бесконечным циклом: --- Добавлено в 2017-08-15 10:41:58Про разбиение строки на части по-позже обсудим... Сами пока думайте (ибо мне на работу пора) Редактировалось 12 раз(а), последний 2017-08-15 23:19:06
|