Функция прекращает выполнение текущей задачи, при этом задача перемещается в состояние DORMANT. Все ресурсы (мютексы) занятые задачей разблокируются. Задача может быть дополнительно удалена, если сервис вызван с параметром TN_EXIT_AND_DELETE_TASK
.
Если счетчик запросов на активацию задачи больше 1, то счетчик декрементируется, а задача переводится в состояние READY. Как только задача станет наиболее приоритетной, она запустится с точки входа в функцию задачи (так же как и первый раз после создания). Следует заметить, что задача будет поставлена в очередь готовых к выполнению (этого же приоритета) последней.
Задача может быть выведена из состояния DORMANT с помощью сервисов tn_task_activate()
и tn_task_iactivate()
. В этом случае задача будет запущена с точки входа в функцию задачи и поставлена в очередь готовых к выполнению (этого же приоритета) последней.
Функция tn_task_exit()
может использоваться только для прекращения выполнения текущей задачи. Для прекращения выполнения другого потока необходимо использовать функцию tn_task_terminate()
.
Вызов:
void tn_task_exit (TN_UWORD attr);
Разрешен вызов:
В контексте задачи
Параметры функции:
attr
TN_EXIT_TASK |
функция прекратит выполнение текущей задачи. Для запуска задачи необходимо использовать сервисы tn_task_activate() или tn_task_iactivate() |
TN_EXIT_AND_DELETE_TASK |
после прекращения выполнения задача будет удалена. Для запуска удаленной задачи нужно создать ее заново функцией tn_task_create |
Возвращаемые значения:
нет
Пример вызова:
extern TN_TCB tcb_Task1 TN_DATA; /* ... */ void Task1 (void *param) { for (;;) { if (need_restart_task_1) tn_task_exit(TN_EXIT_TASK); /* ... */ } }