Command disabled: backlink
 
Available Languages?:

tn_task_exit()

Разрешен вызов только в контексте задачи Может привести к переключению контекста

Функция прекращает выполнение текущей задачи, при этом задача перемещается в состояние DORMANT. Все ресурсы (мютексы) занятые задачей разблокируются. Задача может быть дополнительно удалена, если сервис вызван с параметром 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
параметр, который указывает, будет ли задача удалена после прекращения выполнения:

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/tn_task_exit.txt · Последние изменения: 19.12.2009 16:33 От admin
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki