~~NOTOC~~
===== tn_task_terminate() =====
{{tnkernel:ref:attr_call_task.png|Разрешен вызов только в контексте задачи}} {{tnkernel:ref:attr_call_ct_sw.png|Может привести к переключению контекста}}
Функция переводит задачу из любого состояние в состояние //DORMANT//. Если задача находится в очереди ожидания какого-либо события или объекта, она удаляется из очереди, а все ресурсы (мютексы) используемые задачей будут освобождены.
Если счетчик запросов на активацию задачи больше 1, то счетчик декрементируется, а задача переводится в состояние //READY//. Как только задача станет наиболее приоритетной, она запустится с точки входа в функцию задачи (так же как и первый раз после создания). Следует заметить, что задача будет поставлена в очередь готовых к выполнению (этого же приоритета) последней.
Задача может быть выведена из состояния //DORMANT// с помощью сервисов ''tn_task_activate()'' и ''tn_task_iactivate()''. В этом случае задача будет запущена с точки входа в функцию задачи и поставлена в очередь готовых к выполнению (этого же приоритета) последней.
Задача не может остановить свое выполнение с помощью сервиса ''tn_task_terminate()'', для этого необходимо использовать сервис ''tn_task_exit()''.
**Вызов:**
TN_RETVAL tn_task_terminate(TN_TCB *task);
**Разрешен вызов:** \\
В контексте задачи
**Параметры функции:**
; ''task'' : указатель на TCB перезапускаемой задачи
\\
**Возвращаемые значения:**
; ''TERR_WRONG_PARAM'' : некорректное значение параметра (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров)
; ''TERR_NOEXS'' : попытка перезапуска объекта, не являющегося задачей (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров)
; ''TERR_WCONTEXT'' : попытка активации задачи в прерывании или в пользовательской критической секции :
попытка перезапуска задачи, находящейся в состоянии //DORMANT// : попытка перезапуска текущей задачи
; ''TERR_NO_ERR'' : успешное выполнение
\\
**Пример вызова:**
extern TN_TCB tcb_Task1 TN_DATA;
/* ... */
if (need_stop_task_1)
tn_task_terminate(&tcb_Task1);
/* ... */
\\
----
[[tnkernel:ref:task:intro#сервисы_управления_задачами|К списку сервисов]]