Читаем Язык программирования Euphoria. Справочное руководство полностью

Диспетчер задач, встроенный в систему исполнения программы Euphoria, будет использовать аргумент плана x как руководство к действию при работе с данной задачей. Может случиться так, что не всегда окажутся возможными заданное число последовательных запусков или заданные временные рамки задачи. Например, задача может решаться так долго перед отдачей управления диспетчеру, что другая задача не получит заданного временного окна.

Задачи реального времени имеют более высокий приоритет. Задачи общего времени выполняются, когда нет задач реального времени, готовых к выполнению. Задача может переключаться между режимами выполнения реального и общего времени. Это всё зависит от последнего вызова task_schedule() для данной задачи. Диспетчер никогда не запустит задачу реального времени до открытия её временного окна (величина min), и он пытается не допустить пропуска временного окна (величина max).

Чтобы повысить точность временных рамок, вы можете задать одну и ту же величину для min и для max. Тем не менее, задавая некоторый промежуток, вы добавляете диспетчеру гибкости. Это позволяет ему выполнять план задач более эффективно, избегая непродуктивных задержек. Когда диспетчеру требуется задержка, он вызывает sleep(), если задержка не слишком короткая. Использование sleep() позволяет операционной системе выполнять другие программы.

Величины min и max могут быть дробными. Если величина min меньше, чем разрешение часов диспетчера (в настоящее время 0.01 секунды под Windows и Linux/FreeBSD, и 0.55 секунды под DOS, если не вызывалась tick_rate()), точное диспетчирование не может быть выполнено, но диспетчер будет пытаться запустить задачу несколько раз подряд, чтобы приблизиться к заданному плану. Например, если вы задали время min равным 0.002 секунды, диспетчер будет пытаться запустить вашу задачу .01/.002 = 5 раз подряд, прежде чем ждать следующего тика часов через .01 секунды. Во время следующих 0.01 секунды он будет выполнять вашу задачу ещё (до) следующих 5 раз и так далее, считая, что ваша задача может быть завершена 5 раз за один тик его часов.

Для задач общего времени увеличение аргумента x будет увеличивать процент времени процессора, отдаваемого для выбранной задачи, при уменьшении этого процента для других задач общего времени. При этом эффективность программы в целом возрастёт, так как каждое переключение задач само по себе требует некоторого небольщого времени. Вызов task_yield(), когда та же самая задача продолжает выполняться, занимает меньше времени. Тем не менее, данный приём не всегда применим, так как может блокировать выполнение других задач общего времени на длительные периоды времени. Имейте в виду, что задачи реального времени всегда имеют приоритет перед любым task_yield(), если достигнуто время их активации.

По старту программы исполняется единственная задача. Её номер равен 0, и изначально это задача общего времени, которой разрешен 1 запуск на task_yield(). Другие задачи не могут выполняться, пока задача номер 0 не выполнит task_yield().

Если задача номер 0 (высшего уровня) достигает конца главного файла, вся программа считается исполненной и останавливается, независимо от того, что другие задачи всё ещё могут быть активными.

Если диспетчер не находит активных задач, т.е. в программе не осталось задач, которые следует поставить вновь на выполнение (в плане нет даже задачи номер 0), он останавливает программу с кодом окончания 0, наподобие abort(0).

Пример:

-- Задача t1 будет выполнена до 10 раз подряд, прежде чем

-- другим задачам общего времени будет отдано управление. Если управление

-- требуется задаче реального времени, t1 потеряет управление в её пользу.

task_schedule(t1, 10)

-- Задача t2 будет выполняться некоторое время между 4-ой и 5-ой секундами,

-- наступившими после текущего момента. Если не изменить план для t2, она будет

-- запускаться через каждые 4..5 секунд и в дальнейшем.

task_schedule(t2, {4, 5})

См. также:

task_create, task_yield, task_suspend, task_suspend

task_self

Синтаксис:

a = task_self()

Описание:

Выдаёт номер текущей задачи.

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

Этот номер может понадобиться, если в задаче возникла необходимость перепланировать, приостановить или прекратить саму себя.

Пример:

-- перепланировать себя

task_schedule(task_self(), {5.9, 6.0})

См. также:

task_create, task_schedule, task_yield, task_suspend

task_status

Синтаксис:

i2 = task_status(a)

Описание:

Выдаёт код состояния задачи. Значения кода могут быть 1 (активна), 0 (приостановлена) и -1 (задача не существует).

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

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

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

Язык программирования Euphoria. Справочное руководство
Язык программирования Euphoria. Справочное руководство

Euphoria (юфо'ри, также рус. эйфори'я, ра'дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software) в Канаде, Торонто. Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана» с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib и оберток для wxWidgets, GTK+ и IUP. Euphoria имеет встроенную простую систему баз данных и обертки для работы с другими типам баз данных.[Материал из Википедии]

Коллектив авторов

Программирование, программы, базы данных

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных