~~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#Сервисы управления флагами|К списку сервисов]]