Синхронизация

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

Можно предложить три способа синхронизации.

Способ-1 заключается в том, что более короткий процесс выполняется с помощью ЗАПУСТИ, а более длинный – обычной командой. При использовании этого способа надо уметь рассчитывать время каждого процесса по значениям параметров универсальных процедур. В следующем примере движение длится 20 (второй параметр процедуры), а мультик – 60 (жди-3 * 2-формы-в-периоде * 10-повторений). Поэтому «запускаем» мы более короткое движение:

Программа Пример Выполнение программы
запусти [Команда1] для "машина запусти [движение 5 20]    
Команда2 для "человек мульт_ск [1 2] 10 15 3    
Команда3 для "человек сч    

Способ-2 состоит в использовании специальной формулы, состоящей из двух инструкций ЛогоМиров (к которым пока лучше относится именно как к одной формуле):

жди_пока [готово? [<процесс>]] например:

жди_пока [готово? [движение 2 80]]

Эта формула приостанавливает выполнение программы до тех пор, пока не закончится процесс, заданный командой ЗАПУСТИ. В качестве аргумента <процесс> должно быть написана ровно та инструкция, которая была написана в качестве аргумента команды ЗАПУСТИ. Преимущество этого способа состоит в том, что можно не задуматься о том, какая команда является более короткой (во втором примере команда Движение длится уже 80, а мультик – по-прежнему 60).

Текст программы (пример) Выполнение программы
для "машина запусти [движение 2 80]    
для "человек мульт_ск [1 2] 10 15 3    
жди_пока [готово? [движение 2 80]]      
для "человек сч  

Способ-3 заключается в использовании команды ЖДИ. Он актуален в тех случаях, когда процессы должны закончиться именно одновременно. Зная продолжительность процессов по времени, можно рассчитать, на какое время надо задержать начало более короткого процесса: Вернемся к первому примеру, когда движение длится 20, а мультик – 60. Разница во времени – 40.

Текст программы Выполнение программы
для "человек запусти [мульт_ск [1 2] 10 15 3]    
жди 40    
для "машина движение 5 20      
для "человек сч  

ПК ---

Задание-2 (а,б,в). Доработка проекта Такси (работайте прямо в «старой» процедуре, не делайте копию).

В начале проекта первые два этапа, которые сделаны последовательно, надо сделать одновременно:

– человек подходит к такси,

– такси подъезжает к человеку.

Использовать любой способ синхронизации (или поочередно все три). Имейте в виду, что расчеты времени надо выполнять с учетом Ваших значений аргументов и с учетом того, что в Вашем мультике – 4 шага в периоде.

На оценку «5» надо сделать третий способ.

--- ПК


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: