Функция предназначена для приема сообщения через очередь сообщений dque
. Принятое сообщение (точнее говоря адрес сообщения) сохраняется по указателю data_ptr
.
Если буфер очереди сообщений не пуст, функция передает первое сообщение в буфере по указателю data_ptr
. Таким образом, после выхода из сервиса data_ptr
будет указывать на сообщение, которое было отправлено через очередь. Если есть задача (задачи) ожидающая освобождения буфера для того чтобы отправить сообщение - эта задача будет переведена в состояние готовых к выполнению, а ее сообщение будет положено в очередь.
Если буфер очереди сообщений пуст, и нет задач, ожидающих освобождение буфера, то задача, вызвавшая сервис переводится в состояние ожидания. Если значение параметра timeout
не равно TN_WAIT_INFINITE
, то задача "проснется" по истечении timeout
системных тиков с кодом ошибки TERR_TIMEOUT
.
Вызов:
TN_RETVAL tn_queue_receive (TN_DQUE *dque, void **data_ptr, TN_TIMEOUT timeout );
Разрешен вызов:
В контексте задачи
Параметры функции:
dque
data_ptr
timeout
Возвращаемые значения:
TERR_WRONG_PARAM
TERR_NOEXS
TERR_WCONTEXT
TERR_TIMEOUT
TERR_NO_ERR
Пример вызова:
TN_DQUE queue TN_DATA; /* очередь сообщений */ MY_MSG *message; /* указатель на сообщение */ tn_queue_receive(&queue, &message, 10); if (message->a) { /* ... */ }