PSV100 писал(а):
если "контроль кнопки стоп" выделить в отдельный силуэт-автомат (отдельный алгоритм)
Именно это и есть здравый подход для этой задачи.
PSV100 писал(а):
т.е. алгоритм автомата явно (императивно, без декларативных дефиниций) будет "вмешиваться" (что обычно не приветствуется в "автоматных" методиках) в работу иного автомата через непосредственную установку значения какого-то управляющего свойства/переменной или с помощью спецфункций и т.п.
Сколько угодно способов:
а) "надзирающий" алгоритм может просто останавливать "рабочий" и перезапускать его с нуля. Просто и понятно. Понятно, что "в следующем запуске" все переменные пойдут с нуля и не останется значений "с прошлого раза".
б) "надзирающий" может передавать сообщение в "рабочий" (при этом "рабочий", конечно, должен периодически проверять это сообщение). По сути, это мало отличается от варианта одного алгоритма, периодически проверяющего кнопку стоп, но в более сложных случаях разбивка на разные алгоритмы может упрощать понимание.
Если очень хочется в Дракон-схеме получить семантику "параллельные ветки, в которых выигрывает первая выполнившаяся, а остальные при этом останавливаются", то нужно либо оставить эту идею (т.к. подобного поведения несложно добиться двумя Д-схемами), либо придумать специальную нотацию для этого. Но я не вижу целесообразности изобретения специального вида параллельного выполнения.
Что, если завершать нужно не все параллельные ветки, а нужно дождаться завершения как минимум двух веток?
Ещё одну нотацию изобретать будете?
Или такая задача: ищем запись в телефонных книгах по ФИО, но более 100 записей находить не нужно, т.к. всё рано на экране слишком много будет. Искать можно в нескольких базах одновременно. Поиск останавливаем либо через 5 секунд, либо как найдётся 100 записей, либо как все источники скажут, что "записей больше не найдено".
Для семантики "выполнять параллельно, но не более 5 секунд и не более 100 суммарно найденых записей" снова ещё одну нотацию изобретать будете?
Я к чему: на оба вопроса должны быть ответы "нет" и "нет".
На вопрос "нужна ли нотация для останавливающе-параллельного выполнения" я бы тоже сказал нет. Т.е. можно без неё запросто обойтись.
Если же окажется, что семантика "останова веток" прямо нереально часто нужна (вряд ли, но вдруг), то лучше уж тогда первую из параллельных веток как-то по-особенному выделить (нарисовать рядом с ней пони) и это будет означать, что 1-ая ветка управляющая, остальные рабочие. Т.е. останов рабочих происходит либо как они сами доработают, либо как завершится управляющая.
Иными словами, если есть механизм взаимодействия между автоматами, то с его помощью легко сделать "исключающий параллелизм".
Наоборот -- невозможно. Если есть только "исключающий параллелизм", то из него не сделаешь взаимодействие между автоматами.
Взаимодействие между автоматами нужно. Отрицать его глупо (я не про теоретические изыскания, а про практическую применимость)