Редактирование: ПОД (3 поток), Ответы
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет 322 килобайт. Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах. Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1483: | Строка 1483: | ||
3.Не считается ошибкой наличие в почтовом ящике невостребованных сообщений при завершении процесса. | 3.Не считается ошибкой наличие в почтовом ящике невостребованных сообщений при завершении процесса. | ||
- | + | Использование операторов передачи сообщений | |
''Синхронный режим передачи сообщений'' | ''Синхронный режим передачи сообщений'' | ||
Строка 1497: | Строка 1497: | ||
Использование данного способа обмена сообщениями делает программу еще менее критичной к согласованию операторов обмена сообщениями, так как процесс-отправитель продолжает работу после передачи сообщения, не дожидаясь конца фактической передачи сообщения (и даже начала, так как система интерпретации "должна" сразу же, скопировав передаваемые данные в буфер, "отпустить" процесс) . Получатель сообщений этого типа может выдавать директиву приема сообщения, только удостоверившись в наличии нужного сообщения в почтовом ящике процесса при помощи функций: TESTMSG,TESTTAG,PROBE. Выполнение оператора RECEIVE без проверки наличия сообщения в почтовом ящике процесса, по аналогии с синхронным способом обмена, приводит к задержки выполнения процесса до приема со¬общения с заказанным тегом и ,возможно, с заданным именем отправителя. Но в отличие от синхронного способа, асинхронный способ позволяют про¬водить селекцию поступающих сообщений при помощи конструкций выбора. Пусть процесс может получать сообщения с тегом 1, но от процесса TI - скаляр целого типа, а от процесса TM(1) - массив из 100 целых чисел. Тогда,прием таких сообщений может быть запрограммированно так: | Использование данного способа обмена сообщениями делает программу еще менее критичной к согласованию операторов обмена сообщениями, так как процесс-отправитель продолжает работу после передачи сообщения, не дожидаясь конца фактической передачи сообщения (и даже начала, так как система интерпретации "должна" сразу же, скопировав передаваемые данные в буфер, "отпустить" процесс) . Получатель сообщений этого типа может выдавать директиву приема сообщения, только удостоверившись в наличии нужного сообщения в почтовом ящике процесса при помощи функций: TESTMSG,TESTTAG,PROBE. Выполнение оператора RECEIVE без проверки наличия сообщения в почтовом ящике процесса, по аналогии с синхронным способом обмена, приводит к задержки выполнения процесса до приема со¬общения с заказанным тегом и ,возможно, с заданным именем отправителя. Но в отличие от синхронного способа, асинхронный способ позволяют про¬водить селекцию поступающих сообщений при помощи конструкций выбора. Пусть процесс может получать сообщения с тегом 1, но от процесса TI - скаляр целого типа, а от процесса TM(1) - массив из 100 целых чисел. Тогда,прием таких сообщений может быть запрограммированно так: | ||
- | + | IF (TESTTAG(1)) THEN | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | SELECT MESSAGE | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | CASE(1,TI) | |
- | + | RECEIVE (1) K | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | CASE(1,TM(1)) | |
- | + | RECEIVE (1) KM | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | END SELECT | |
+ | |||
+ | END IF или: | ||
+ | |||
+ | SELECT MESSAGE | ||
+ | |||
+ | CASE(1,TI) | ||
+ | |||
+ | RECEIVE (1) K | ||
+ | |||
+ | CASE(1,TM(1)) | ||
+ | |||
+ | RECEIVE (1) KM | ||
+ | |||
+ | CASE DEFAULT | ||
+ | |||
+ | GO TO 2 | ||
+ | |||
+ | END SELECT 2 CONTINUE | ||
+ | |||
+ | Ожидание этих сообщений, то есть, по аналогии с синхронной переда¬чей сообщений, прерывание работы процесса до получения сообщения (в данном случае любого из ожидаемого) записывается так: | ||
+ | |||
+ | SELECT MESSAGE | ||
+ | |||
+ | CASE(1,TI) | ||
+ | |||
+ | RECEIVE (1) K | ||
+ | |||
+ | CASE(1,TM(1)) | ||
+ | |||
+ | RECEIVE (1) KM | ||
+ | |||
+ | END SELECT | ||
+ | |||
+ | Если сообщения различаются тегами, то конструкция их ожидания мо¬жет иметь вид: | ||
+ | |||
+ | SELECT MESSAGE | ||
+ | |||
+ | CASE(1) | ||
+ | |||
+ | RECEIVE (1) K | ||
+ | |||
+ | CASE(2,TM(1)) | ||
+ | |||
+ | RECEIVE (2) KM | ||
+ | |||
+ | END SELECT | ||
+ | |||
+ | Режим передачи сообщений без ожидания | ||
Передачи сообщений этого типа рекомендуется использовать для пере¬дачи данных "впрок", заблаговременно. Если после операторов SEND / RECEIVE без ожидания, поместить операторы: CALL MSDONE(L), | Передачи сообщений этого типа рекомендуется использовать для пере¬дачи данных "впрок", заблаговременно. Если после операторов SEND / RECEIVE без ожидания, поместить операторы: CALL MSDONE(L), |