~~NOTOC~~ ===== tn_task_exit() ===== {{tnkernel:ref:attr_call_task.png|Разрешен вызов только в контексте задачи}} {{tnkernel:ref:attr_call_ct_sw.png|Может привести к переключению контекста}} Функция прекращает выполнение текущей задачи, при этом задача перемещается в состояние //DORMANT//. Все ресурсы ([[tnkernel:ref:mutex:intro|мютексы]]) занятые задачей разблокируются. Задача может быть дополнительно удалена, если сервис вызван с параметром ''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'' : параметр, который указывает, будет ли задача удалена после прекращения выполнения: {| class = "fpl" |- | ''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); /* ... */ } } \\ ---- [[tnkernel:ref:task:intro#сервисы_управления_задачами|К списку сервисов]]