~~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#сервисы_управления_задачами|К списку сервисов]]