~~NOTOC~~
===== tn_event_wait_polling() =====
Функция предназначена для проверки битовой маски флага без блокировки задачи.
Условие проверки определяется маской ''wait_pattern'' и режимом ожидания ''wait_mode''. Если условие выполняется, битовая маска флага будет возвращена по указателю ''p_flags_pattern''.
Если на момент вызова функции условие не выполняется, функция вернет код ошибки ''TERR_TIMEOUT''.
Если флаг ''evf'' имеет атрибут ''TN_EVENT_ATTR_SINGLE'', а очередь ожидания флага не пуста, то функция вернет код ошибки ''TERR_ILUSE'', что означает попытку проверки флага, предназначенного только для одной (уже ожидающей его) задачи.
Если флаг ''evf'' имеет атрибут ''TN_EVENT_ATTR_CLR'', битовая маска флага обнуляется.
Параметр ''wait_mode'' формирует условие совпадения. Если ''wait_mode == TN_EVENT_WCOND_OR'', то условие будет выполнено, если хотя бы один бит из битовой маски флага будет соответствовать ''wait_pattern''. Если ''wait_mode == TN_EVENT_WCOND_AND'', то для выполнения условия необходимо чтобы все биты битовой маски флага соответствовали параметру ''wait_pattern''.
**Вызов:**
TN_RETVAL tn_event_wait_polling (TN_EVENT *evf,
TN_UWORD wait_pattern,
TN_UWORD wait_mode,
TN_UWORD *p_flags_pattern
);
**Разрешен вызов:** \\
В контексте задачи
**Параметры функции:**
; ''evf'' : указатель на объект типа флаг
; ''wait_pattern'' : параметр сравнения с битовой маской флага
; ''wait_mode'' : условие совпадения, может принимать одно из двух значений:
{| class = "fpl"
|-
| ''TN_EVENT_WCOND_OR''
| условие выполняется, если хотя бы один из битов маски флага совпадает с маской сравнения ''wait_pattern''
|-
| ''TN_EVENT_WCOND_AND''
| условие выполняется только в том случае, если хотя все биты маски флага совпадают с маской сравнения ''wait_pattern''
|}
; ''p_flags_pattern'' : указатель по которому возвращается значение битовой маски флага если условие выполнено
\\
**Возвращаемые значения:**
; ''TERR_WRONG_PARAM'' : некорректное значение параметра ((данный код возврата возможен только в случае использования сервисов с проверкой параметров))
; ''TERR_NOEXS'' : попытка обращения к объекту, не являющегося флагом ((данный код возврата возможен только в случае использования сервисов с проверкой параметров))
; ''TERR_WCONTEXT'' : попытка вызова сервиса из пользовательской критической секции или в прерывании
; ''TERR_ILUSE'' : попытка проверки флага с атрибутом ''TN_EVENT_ATTR_SINGLE'', если его очередь ожидания не пуста
; ''TERR_TIMEOUT'' : условие не выполняется
; ''TERR_NO_ERR'' : успешное выполнение
\\
**Пример вызова:**
TN_EVENT event_test;
TN_UWORD flag;
if (tn_event_wait_polling(&event_test, 0x8000, TN_EVENT_WCOND_AND, &flag) == TERR_TIMEOUT)
{
/* ... */
}
\\
----
[[tnkernel:ref:event:intro#Сервисы управления флагами|К списку сервисов]]