~~NOTOC~~
===== tn_task_sleep() =====
{{tnkernel:ref:attr_call_task.png|Разрешен вызов только в контексте задачи}} {{tnkernel:ref:attr_call_ct_sw.png|Может привести к переключению контекста}}
Функция переводит текущую задачу в ожидание на время не меньше чем ''timeout'' системных тиков. Если время ожидания истекло, а задача не была восстановлена (сервисом ''tn_task_wakeup()''), задача будет выведена планировщиком из состояния ожидания и продолжит выполнение когда станет наиболее приоритетной.
Задача может быть переведена в ожидание с параметром ''TN_WAIT_INFINITE''. В этом случае задача будет находится в ожидании до тех пор, пока не будет вызван сервис ''tn_task_wakeup()'' или ''tn_task_iwakeup()''.
Каждая задача имеет счетчик запросов на пробуждение. Если у текущей задачи этот счетчик больше или равен 1, то вызов сервиса ''tn_task_sleep()'' декрементирует счетчик, а задача продолжает выполнение.
**Вызов:**
TN_RETVAL tn_task_sleep (TN_TIMEOUT timeout);
**Разрешен вызов:** \\
В контексте задачи
**Параметры функции:**
; ''timeout'' : интервал времени в системных тиках на который задача будет переведена в ожидание. ''timeout'' ⊆ [''1..TN_WAIT_INFINITE''], где ''TN_WAIT_INFINITE'' = 65‘535 для 16-битных контроллеров и ''TN_WAIT_INFINITE'' = 4‘294‘967‘295 для 32-битных контроллеров
\\
**Возвращаемые значения:**
; ''TERR_WRONG_PARAM'' : некорректное значение параметра, ''timeout'' = 0 (__замечание:__ данный код возврата возможен только в случае использования сервисов с проверкой параметров)
; ''TERR_WCONTEXT'' : попытка вызова сервиса в прерывании или в пользовательской критической секции
; ''TERR_NO_ERR'' : успешное выполнение
\\
**Пример вызова:**
void TN_TASK Task1 (void *param)
{
for (;;)
{
/* ... */
tn_task_sleep(10);
/* ... */
}
}
\\
----
[[tnkernel:ref:task:intro#сервисы_управления_задачами|К списку сервисов]]