===== tn_task_release_wait() =====

{{tnkernel:ref:attr_call_task.png|Разрешен вызов только в контексте задачи}} {{tnkernel:ref:attr_call_ct_sw.png|Может привести к переключению контекста}}

Функция выводит задачу из состояния ожидания события вне зависимости от причины ожидания.

Если задача находится в состоянии //WAITING//, она переводится в состояние //READY//. Если задача находится в состоянии //WAITING_SUSPEND//, она переводится в состояние //SUSPEND//.
Если задача находилась в состоянии //WAITING// по причине вызова функции ''tn_task_sleep()'', вызов функции ''tn_task_release_wait()'' с указателем на эту задачу кроме всего прочего сбрасывает счетчик попыток пробуждения задачи.
Функция не может использоваться для активации задачи, которая находится в состоянии //SUSPEND//. Задача не может вызывать функцию ''tn_task_release_wait()'' с указателем на саму себя.

**Вызов:**
<code cpp>
TN_RETVAL tn_task_release_wait (TN_TCB *task);
</code>

**Разрешен вызов:** \\ 

В контексте задачи

**Параметры функции:**

  ; ''task'' : указатель на TCB задачи

**Возвращаемые значения:**  

  ; ''TERR_WRONG_PARAM'' : некорректное значение параметра (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров)
  ; ''TERR_NOEXS'' : попытка пробуждения объекта, не являющегося задачей
  ; ''TERR_WCONTEXT'' : попытка пробуждения задачи в прерывании или в пользовательской критической секции : задача находится в состоянии, отличном от //WAITING// или //WAITING_SUSPEND//
  ; ''TERR_NO_ERR'' : успешное выполнение

\\ 
**Пример вызова:**  
<code cpp>
extern TN_TCB tcb_Task1  TN_DATA;

/* ... */
if (need_forse_task_1)
    tn_task_release_wait(&tcb_Task1);
/* ... */
</code>

\\ 

----
[[tnkernel:ref:task:intro#сервисы_управления_задачами|К списку сервисов]]