Набор подпрограмм данного раздела позволяет вам организовывать в своей программе множественные независимые задачи, решаемые в режиме разделения времени. Каждая задача имеет свою собственную текущую исполняемую команду, свой собственный стек вызовов и своё собственное множество частных переменных. Локальные (местные) и глобальные переменные программы являются общими для всех задач. Когда в задаче вызывается подпрограмма 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 (задача_другая)
- управление задачами передаётся диспетчеру, запускающему на исполнение другую задачу.
...
3. Алфавитный справочник по стандартным подпрограммам
от A до B
?
Синтаксис:
? 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.