Набор подпрограмм данного раздела позволяет вам организовывать в своей программе множественные независимые задачи, решаемые в режиме разделения времени. Каждая задача имеет свою собственную текущую исполняемую команду, свой собственный стек вызовов и своё собственное множество частных переменных. Локальные (местные) и глобальные переменные программы являются общими для всех задач. Когда в задаче вызывается подпрограмма task_yield(), выполнение задачи приостанавливается, управление передаётся диспетчеру задач Euphoria, и он решает, какую задачу из общей очереди следует поставить на дальнейшее исполнение.

Демонстрационная игра The Language War, lw.ex, широко использует механизм многозадачности для создания модели боя, в котором участвуют многочисленные независимо движущиеся корабли, торпеды, фазоры и т.д. Просмотрите также демо-программу taskwire.exw для Windows, и демо-программу news.exu для Linux и FreeBSD.

task_clock_start (задача_часы_старт)

- перезапускает часы диспетчера задач

task_clock_stop (задача_часы_стоп)

- останавливает часы диспетчера задач

task_create (задача_новая)

- создаёт новую задачу

task_list (задача_список)

- выдаёт список всех задач

task_schedule (задача_план)

- задаёт диспетчеру план решения задачи

task_self (задача_какая)

- выдаёт идентификатор текущей задачи (номер)

task_status (задача_состояние)

- выдаёт текущее состояние задачи (активна, приостановлена, прервана)

task_suspend (задача_стоп)

- приостанавливает решение задачи

task_yield (задача_другая)

- управление задачами передаётся диспетчеру, запускающему на исполнение другую задачу.

...

<p>3. Алфавитный справочник по стандартным подпрограммам</p><p>от A до B</p>

?

Синтаксис:

? x

Описание:

Это просто короткая форма записи для команды: pretty_print(1, x, {}), по которой на экране осуществляется печать величины объекта, заданного выражением. Для более наглядного отображения структуры объекта печать производится в столбик со скобками, запятыми и отступами. Единственное отличие от pretty_print() заключается в том, что печать по команде ? завершается ещё и автоматическим переводом курсора в начало новой строки.

Пример:

? {1, 2} + {3, 4} -- будет напечатано {4, 6}

См. также:

pretty_print, print

abort

Синтаксис:

abort(i)

Описание:

Прерывает исполнение программы. Аргумент i представляет собой небольшую целочисленную величину кода окончания программы, выдаваемого в операционную систему. Код окончания 0 в общем случае соответствует успешному завершению программы. Другие коды используются для указания на характер ошибки, по которой программа прервана. Пакетные программы DOS (.bat-файлы) могут считывать величину этого кода с помощью команды errorlevel. Программы Euphoria могут считывать эту величину, если дочерняя программа была запущена из подпрограммы system_exec().

Комментарии:

Подпрограмма abort() бывает особенно полезна, когда необходимо немедленно прервать исполнение программы изнутри глубоко вложенных вызовов подпрограмм, например, из-за обнаруженной опасной ошибки.

Если вы не применяете abort(), а программа завершается естественным порядком, интерпретаторы ex.exe/exw.exe/exu выдают в операционную систему код окончания 0. Если ваша программа прерывается по обнаруженной Euphoria ошибке времени компиляции или времени исполнения, выдаётся код 1.

Пример:

if x = 0 then

puts(ERR, "не могу делить на 0 !!!\n")

abort(1)

else

z = y / x

end if

См. также:

crash_message, system_exec

all_palette

Платформа:

DOS32

Синтаксис:

include graphics.e

all_palette(s)

Описание:

Задаёт новые интенсивности цветов для всего набора цветов текущего графического режима. Аргумент s является рядом формы: {{r,g,b}, {r,g,b}, ..., {r,g,b}}

Каждый элемент ряда задаёт новую интенсивность цвета {красный, зелёный, синий} для соответствующего номера цвета, начиная с номера 0. Величины для красного (r), зелёного (g) и синего (b) должны быть в пределах от 0 до 63.

Комментарии:

Данная процедура исполняется значительно быстрее, чем если бы вы использовали palette() для задания новых интенсивностей цвета поочерёдно. Эта процедура может быть использована с read_bitmap() для быстрого вывода изображения на экран.

Пример программы:

demo\dos32\bitmap.ex

См. также:

get_all_palette, palette, read_bitmap, video_config, graphics_mode

allocate

Синтаксис:

include machine.e

a = allocate(i)

Описание:

Подготавливает участок памяти, включающий i последовательных байтов. Выдаёт начальный адрес этого участка или 0, если память не может быть выделена. Выданный адрес позволит, как минимум, разместить очередные 4 байта, то есть, память выделяется участками, длина которых кратна 4, даже если i не кратно 4.

Перейти на страницу:

Все книги серии Euphoria

Похожие книги