Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Главный модератор
Ответов: 2997
Рейтинг: 395
#76: 2020-01-13 13:41:03 ЛС | профиль | цитата
Igor08 писал(а):
не получится в Hiasm 4 сделать программу с многократным повторным выполнением модулей?

Критерий истины - опыт. Пробуйте, экспериментируйте - HiAsm отличная площадка для проверки своих идей. Зачем у кого-то спрашивать что будет если...

Редактировалось 1 раз(а), последний 2020-01-13 13:41:18
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 44
Рейтинг: 0
#77: 2020-01-13 13:45:25 ЛС | профиль | цитата
Понятно, что можно экспериметировать. Только так как я не разбираюсь в программировании, то не знаю, как правильно. Galkov же писал, что если работает, то не факт, что правильно. Может кто подсказать, что происходит при вызове DeferredEvent? Что там стирается, обнуляется?

Редактировалось 2 раз(а), последний 2020-01-13 13:53:10
карма: 0

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#78: 2020-01-13 14:30:02 ЛС | профиль | цитата
Igor08 писал(а):
Galkov же писал, что если работает, то не факт, что правильно

Если брать уровень новичка HiAsm за студента первого курса, то Galkov будет академиком АН. Поэтому, нужно всегда делать допущение, что он абстрагируется от конкретики в теоретику. Так что, если ваша программа будет работать "от сих и до сих", но, возможно, не будет "от сих пополам до сих" и это Вас устроит, то хрен с ним...
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Главный модератор
Ответов: 2997
Рейтинг: 395
#79: 2020-01-13 15:58:52 ЛС | профиль | цитата
Galkov писал(а):
Насколько я помню, моя семантика была отвергнута под девизом "ай-я-яй, а как же тогда рекурсию делать"
Неужели что-то изменилось с тех очень уже давних пор

Случайно натолкнулся на что-то касающееся темы кольцевания:
https://forum.hiasm.com/post/57074
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#80: 2020-01-13 16:52:04 ЛС | профиль | цитата
Igor08 писал(а):
Может кто подсказать, что происходит при вызове DeferredEvent?

DeferredEvent откладывает выполнение события по времени внутри одной функции, отдавая управление обратно функции и используя для этого системные очереди сообщений. Те, для функции событие как бы наступило, а на самом деле, оно наступит когда-нибудь, а вот когда это событие наступит, то это известно только системе.
карма: 22

0
Ответов: 44
Рейтинг: 0
#81: 2020-01-13 16:58:51 ЛС | профиль | цитата
Если у меня программа вылетает при кольцевании с ошибкой c0000005, наверно тогда переполняется стек вызовов функций или теряется связь с данными? Возможно этот стек как-то очистить? Такая ошибка появляется, если не использовать DeferredEvent.
С этим элементом программа работает до определенного момента, потом не выполняет расчеты до конца.
Вопрос насчёт элемента - hub: у него события выполняются последовательно. А после hub они выполняются почти параллельно, одновременно можно сказать? Или пока по одной ветки все не выполнится после hub, другая выполнятся не будет? А все, насчёт hub прочитал в помощи, как он работает.
Тогда выходит, если по кольцу стоят hub, тогда вообще все сложно получается.

Редактировалось 9 раз(а), последний 2020-01-13 19:12:09
карма: 0

0
Ответов: 9906
Рейтинг: 351
#82: 2020-01-13 22:04:32 ЛС | профиль | цитата
Igor08 писал(а):
Если у меня программа вылетает при кольцевании с ошибкой

Такие вопросы не принимаются категорически.
Вам сказано: пальцы в розетку совать нельзя. Точка.
Вы спрашиваете: почему я отлетел к стенке, хотя перед этим совал - и все было нормально.
На этот вопрос никто отвечать не будет. Ну просто времени жалко, на глупости-то отвечать...

Igor08 писал(а):
А после hub они выполняются почти параллельно

Читаем про "модель паровозиков": https://forum.hiasm.com/post/293674
Потом думаем...
Потом снова перечитываем, и снова - думаем.
И начинаем понимать, постепенно, как все это работает.

Редактировалось 1 раз(а), последний 2020-01-13 22:05:56
карма: 9

0
Ответов: 167
Рейтинг: 7
#83: 2020-01-13 23:22:48 ЛС | профиль | цитата
Igor08, я прекрасно понимаю, что вы не разбираетесь в программировании (я тоже ), но вы должны уловить суть - HiASM - это отдельный мир со своими правилами и условностями. И эти правила можно либо прочитать, либо доказывать опытным путём... Так вот, поймите, что я когда-то давно тоже считал, что если подключить точку элемента doEvent на onEvent , то процесс должен повторяться словно цикл.... НО ЭТО НЕ ТАК РАБОТАЕТ. Подключение события с точки выхода элемента на точку входа, которая =≥ обращается к точке выхода, которую мы подключали на точку входа - КОЛЬЦЕВАНИЕ.
А активация элемента цикла, который будет НУЖНОЕ КОЛ-ВО РАЗ АКТИВИРОВАТЬ ТОЧКУ НА ВЫХОД, дожидаясь совершения события - ЦИКЛ! Это важно понять! Ведь мир и HiAsm отличаются простейшей вещью, (если соблюдать тему поездов ) поездов в реальном мире ходит сколько угодно, а в HiASM МОЖЕТ СОВЕРШАТЬ ДВИЖЕНИЕ ЛИШЬ ОДИН ПОЕЗД. И НЕЛЬЗЯ НЕ ДАВ ПОЕЗДУ ПРОЕХАТЬ МАРШРУТ ЗАПУСТИТЬ ДРУГОЙ ПОЕЗД ПО ЭТОМУ ЖЕ МАРШРУТУ! ЭТО АКСИОМА НЕ ТОЛЬКО HiASM'a, НО И ВСЕГО ПРОГРАММИРОВАНИЯ. ПО ОДНОЙ РЕЛЬСЕ НЕ ИДУТ БОЛЕЕ ОДНОГО ПОЕЗДА!!! И С НЕЙ НУЖНО СМИРИТЬСЯ!!! ИСПОЛЬЗУЙТЕ ЭЛЕМЕНТЫ ЦИКЛА С УСЛОВИЕМ, ТАЙМЕРЫ, ПОТОКИ, НО НЕ В КОЕМ СЛУЧАЕ НЕ ЗАКОЛЬЦЕВАНИЕ!!!!!

--- Добавлено в 2020-01-13 23:28:16

[flood]P.S:бесспорно есть ещё множество особенностей, о которых можно говорить вечность, но я этого делать не буду... Вы и сами всё прочитаете в СПРАВКЕ, или НА ВИКИ ФОРУМА[/flood]

--- Добавлено в 2020-01-13 23:31:17

Galkov писал(а):
пальцы в розетку совать нельзя

[flood]а так хотелось [/flood]

--- Добавлено в 2020-01-13 23:39:16

Давайте попробуем доказать эту аксиому... Если поезд ном.1 отправится по потоку выполнять различные события, то в итоге, венувшись несанкционированно обратно, программа думает, что случилась ошибка, т.к она не разрешала здесь проезжать поезду, пока тот поезд не достигнет конца... А что такое конец? Конец - завершение потока и запуск выполнения другого потока. Если вы когда-нибудь видели скрипты, или исходный код, то замечали слово end в его конце - это КОНЕЦ!
И что будет являться концом при кольцевании? НИЧТО! ЕГО НЕТ! А ТАКОГО НЕ МОЖЕТ БЫТЬ!!! Поэтому программа и летит : она нашла несанкционированный доступ к рабочему потоку, причём к потоку без конца...
Да это сложно, но это впринципе ОЧЕНЬ УПРОЩЁННАЯ СУТЬ РАБОТЫ ПРОГРАММ. ЕЁ НУЖНО ПРИНЯТЬ К СВЕДЕНИЮ. ЭТО ОЧЕНЬ ВАЖНО!!!

Редактировалось 9 раз(а), последний 2020-01-13 23:40:41
карма: 0
c, c++, lua
0
Ответов: 9906
Рейтинг: 351
#84: 2020-01-14 00:03:53 ЛС | профиль | цитата
UtoECat писал(а):
а в HiASM МОЖЕТ СОВЕРШАТЬ ДВИЖЕНИЕ ЛИШЬ ОДИН ПОЕЗД.

Я смотрю, что чукча не читатель, чукча - писатель:
Galkov писал(а):
В чем заключается главное заблуждение: представление о том, что по схеме бегает только один паровозик по путям, проложенным в схеме -- НЕПРАВИЛЬНОЕ.
Все немного по другому. Их много, свой у каждой станции.


Неужели так трудно было сходить по ссылке.............

Редактировалось 1 раз(а), последний 2020-01-14 00:04:37
карма: 9

0
Ответов: 167
Рейтинг: 7
#85: 2020-01-14 01:14:20 ЛС | профиль | цитата
Galkov писал(а):
представление о том, что по схеме бегает только один паровозик по путям, проложенным в схеме -- НЕПРАВИЛЬНОЕ.

Смотря как рассуждать. Мои рассуждения построены на поочерёности обработки действий. (Они не точны, и описаны максимально обрезано), но и твои не совсем точны : следует указать, что :
Паравозики двигаются не одновременно а поочерёдно "проходят каждый километр", тогда ПАРАВОЗ ТОЛЬКО ОДИН. Но если согласоваться с подтекстом паралельности потоков, то оне один.
Суть : смотря как рассуждать! Я делаю подтекст на том, что к потоку не стоит обращаться если по нему уже идёт поезд и что каждый путь должнен иметь конец. Твоя :

паравоз не один, и их куча. Их много, свой у каждой станции.
Да, некоторая станция отправила паровозик на другую. И она ждет его обратно. И только когда он вернется, станция продолжит исполнять свой протокол (расписание, если хотите). А паровозик, который был отправлен, вовсе не путешествует далее по схеме, а стоит и ждет, пока его отпустит станция-адресат. Занимая путь, между прочим.
А эта станция-адресат имеет свой паровозик, и свою жизнедеятельность отражает в том, что уже его (а не тот, который привез задание к исполнению) отправляет по путям в соответствии со схемой и своим расписанием. И этот паровозик тоже будет занимать путь, пока уже другие станции (погонявши по схеме свои паровозики) не отпустят его.
Так вот, если какая-то станция отправит паровозик на уже занятый путь - будет крушение.
Грубо говоря поведение схемы непредсказуемо. Может быть все что хочешь - просто неправильное поведение элемента, сопровождаемое вопросами на форуме; падение (типа AV) схемы; утечка памяти, как в Вашем случае. А иногда это и работает (у нас заложен некоторый запас прочности).

У НАС СОВЕРШЕННО РАЗНОЕ ПОНИМАНИЕ МИРА . Ты пытаешься сопоставить информацию "ПОЕЗД ТОЛЬКО ОДИН " Со своим мировоззрением, хотя это моё мнение и моё представление, которое более-менее верно.

--- Добавлено в 2020-01-14 01:21:46

Galkov писал(а):

Неужели так трудно было сходить по ссылке

Я сходил и почитал... Я всего лишь представил свой вариант объяснения на основе своего мировоззрения HiAsm . В любом случае с научной и энциклопедической точки зрения НАШИ РАССУЖДЕНИЯ НЕ ВЕРНЫ! ЭТО ЧУШЬ!ВСЁ РАБОТАЕТ ИНАЧЕ И ГОРАЗДО СЛОЖНЕЕ!!!

--- Добавлено в 2020-01-14 08:23:44

В любом случае в первой мысли про то, что не стоит обращаться к занятому потоку мы сошлись Суть одна, а представления разные...

P.P.S: я писал ночью, был усталый, и мог немного исказить основную мысль ;)

Редактировалось 11 раз(а), последний 2020-01-14 09:07:57
карма: 0
c, c++, lua
0
Ответов: 44
Рейтинг: 0
#86: 2020-01-14 04:45:56 ЛС | профиль | цитата
По другому не получается написать программу. Не знаю как. Надо чтобы в программе много раз выполнялись одни и те же элементы.
карма: 0

0
Ответов: 167
Рейтинг: 7
#87: 2020-01-14 08:43:39 ЛС | профиль | цитата
вы пытаетесь наступить на одни и те же грабли несколько раз... Зачем?
Давайте приведу ещё один пример :
Представьте слоника, бегущего по пути, который за ним рушится ( зачем? - это защита повторной активации потока), и по пути расставлены кнопки - элементы (или правильнее строка кода) . У всего есть начало и конец (по крайней мере в программировании) . Пора познакомить вас с функцией (или в Delphi с процедурами) - она имеет начало и конец. ЭТО ВАЖНО! Почему нельзя из функции запустить её саму? - подумаем на примере со слоником : он доходя до конца процедуры (или функции) нажимает на последнюю кнопку, которая "телепортирует" его на следующий путь (процедуру, или функцию. Называйте как вам нравится), восстанавливая путь по которому он бежал. (P.S: правильнее он туда попадает сразу ,добежав до конца процедуры и восстановив прежний путь его дорога цельно продолжается к следующей процедуре). Это пример простой работы простой функции (или процедуры… без разницы) . Так вот : если мы заставим слона вернуться назад на разрушенный путь , то он упадёт! И будет так падать снова, и снова, т.к дорога не восстановлена, т.к мы не дошли до конца процедуры - последней кнопки этой процедуры, которая восстанавливает путь...
карма: 0
c, c++, lua
0
Ответов: 44
Рейтинг: 0
#88: 2020-01-14 08:47:54 ЛС | профиль | цитата
Это я понимаю. А как тогда работают графические интерфейсы, интерфейсы ввода-вывода, они всегда могут ответить на событие.
карма: 0

0
Ответов: 167
Рейтинг: 7
#89: 2020-01-14 08:49:49 ЛС | профиль | цитата
Почему?
почему так нельзя? Потому что в компьютере есть лишь один слон, который в каждой запущенной программе выполняет по одной такой процедуре... В новых системах слон идёт не по хлипкому пути, а по новой дороге помеченной флагом, что он тут был, и сюда не надо идти... Почему? Почему ре надо? Т.к иначе слон будет как в попу укушенный бегать кругами по этой бесконечной процедуре и это убъёт систему! Она не сможет работать дальше! (Собственно ошибки в программах в старых версиях виндовс действительно крашали систему )... А тут слон видит флаг : посылает на три буквы эту процедуру, выдавая ошибку с адресом ,где и находится ошибка, и идёт выполнять процедуры других программ... ТЕПЕРЬ ТО ЯСНО!?

--- Добавлено в 2020-01-14 08:52:49

Очень просто : они обрабатываются через циклы : циклом проверяется где находится курсор, есть-ли он в регионе кнопки, нажата-ли кнопка... В конце слон всё равно уберёт флаг с потока : он завершён успешно... Далее выполняет прочие процедуры в твоей и других программах....

--- Добавлено в 2020-01-14 08:55:57

Главное отличие потока от цикла :
Поток : запуск слона , установка флажка≥ слон бежит, что-то делает, нажимает кнопки≥ слон всё сделал, убирается флаг, он делает всё остальное...
Цикл : запуск цикла, установка флага ≥ слон бежит, всё выполняет≥ завершает одну интеграцию цикла, убирает флаг, идёт в другие программы выполнять другие процедуры ПОТОМ ВОЗВРАЩАЕТСЯ В ТВОЮ И ПОВТОРЯЕТ ДЕЙСТВИЕ ДО ТЕХ ПОР, ПОКА ЦИКЛ НЕ БУДЕТ ОСТАНОВЛЕН !

--- Добавлено в 2020-01-14 08:58:05

НО : ЦИКЛ МОЖНО ЛИБО ЗАПУСТИТЬ ТАК : ЧТОБЫ ОН ЛИШЬ РАБОТАЛ ЧЕРЕЗ КАЖДЫЙ ПРОБЕГ СЛОНА, ЛИБО СЛОН БУДЕТ ПРОБЕГАТЬ СНАЧАЛА ЭТОТ ЦИКЛ ОДИН ОДИН РАЗ В ТВОЕЙ ПРОГРАММЕ, ПОТОМ ДРУГОЙ В ТВОЕЙ ЖЕ ПРОГРАММЕ, ПОТОМ ДРУГИЕ ПРОЦЕДУРЫ ДРУГИХ ПРОГРАММ, А ПОТОМ ВЕРНЁТСЯ В ТВОЮ И ПОВТОРИТ ТО ЖЕ САМОЕ! (Это параллельность потоков. Если запустить цикл через паралелльный поток, то слон после его пробега выполнит в программе всё прочее, и пойдёт дальше, потом снова вернётся... И так по кругу)

--- Добавлено в 2020-01-14 09:00:19

Программа построена на едином цикле, который при остановке завершает программу. (Перед этим запустив выгрузку себя из памяти) . В программировании важны не только переменные ,и вычисления ,и сравнения, а так же ПАРАЛЛЕЛЬНОСТЬ ПОТОКОВ, ЦИКЛЫ, ЗАДЕРЖКИ, И МНОГОЕ ДРУГОЕ...

--- Добавлено в 2020-01-14 09:00:38

Это ВАЖНО ПОНЯТЬ!

--- Добавлено в 2020-01-14 09:01:27

Используйте элементы цикла, или цикла с условием... Это поможет.

--- Добавлено в 2020-01-14 09:03:37

Igor08 писал(а):
По другому не получается написать программу

Во первых - вы её не пишете, а составляете из элементов.
Во вторых - если не выходит, не значит что не работает! Покапайтесь в примерах работы с элементами hiasm, в каталоге программы! Это поможет вам с ним получше разобраться! (С циклом) (и с параллельными потоками тоже)

Редактировалось 11 раз(а), последний 2020-01-14 09:20:01
карма: 0
c, c++, lua
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#90: 2020-01-14 10:28:01 ЛС | профиль | цитата
UtoECat писал(а):
Почему нельзя из функции запустить её саму?

Вообще-то можно. В программировании это называется рекурсией (не путать с кольцеванием).
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)