~~NOTOC~~ ===== tn_queue_send() ===== Функция предназначена для отсылки сообщения ''data_ptr'' через очередь сообщений ''dque''. Если очередь задач, ожидающих сообщение не пуста, сервис переводит первую в очереди задачу в состояние готовой к выполнению и передает сообщение ''data_ptr'' в эту задачу, минуя буфер сообщений. Если ни одна из задач системы не ожидает сообщение, параметр ''data_ptr'' кладется в конец буфера сообщений очереди и задача продолжает выполнение. Если буфер сообщений заполнен, то задача, посылающая сообщение переводится в состояние ожидания до тех пор, пока хотя бы одно сообщение из буфера не будет принято. При этом задача может выйти из ожидания с кодом ''TERR_TIMEOUT'' по истечении ''timeout'' системных тиков. **Вызов:** TN_RETVAL tn_queue_send (TN_DQUE *dque, void *data_ptr, TN_TIMEOUT timeout ); **Разрешен вызов:** \\ В контексте задачи **Параметры функции:** ; ''dque'' : указатель на объект очереди сообщений. ; ''data_ptr'' : указатель на сообщение ; ''timeout'' : таймаут ожидания освобождения буфера в системных тиках. Значение параметра должно больше нуля. Если значение параметра равно ''TN_WAIT_INFINITE'', задача, посылающая сообщение будет ожидать освобождения буфера. **Возвращаемые значения:** ; ''TERR_WRONG_PARAM'' : некорректное значение параметра ((данный код возврата возможен только в случае использования сервисов с проверкой параметров)) ; ''TERR_NOEXS'' : попытка обращения к объекту, который не является очередью ((данный код возврата возможен только в случае использования сервисов с проверкой параметров)) ; ''TERR_WCONTEXT'' : вызов сервиса в пользовательской критической секции или в обработчике прерывания ; ''TERR_TIMEOUT'' : выход из сервиса по таймауту ; ''TERR_NO_ERR'' : успешное выполнение \\ **Пример вызова:** TN_DQUE queue TN_DATA; MY_MSG message; message.a = 1; message.b = 2; tn_queue_send(&queue, (void*)&message, TN_WAIT_INFINITE); \\ ---- [[tnkernel:ref:dqueue:intro#Сервисы управления очередями сообщений|К списку сервисов]]