enqueue_messageT_enqueue_messageEnqueueMessageEnqueueMessageenqueue_message (Operator)

Name

enqueue_messageT_enqueue_messageEnqueueMessageEnqueueMessageenqueue_message — Einreihen von Nachrichtenobjekten in eine Warteschlange.

Signatur

enqueue_message( : : QueueHandle, MessageHandle, GenParamName, GenParamValue : )

Herror T_enqueue_message(const Htuple QueueHandle, const Htuple MessageHandle, const Htuple GenParamName, const Htuple GenParamValue)

void EnqueueMessage(const HTuple& QueueHandle, const HTuple& MessageHandle, const HTuple& GenParamName, const HTuple& GenParamValue)

void HMessageQueue::EnqueueMessage(const HMessageArray& MessageHandle, const HTuple& GenParamName, const HTuple& GenParamValue) const

void HMessageQueue::EnqueueMessage(const HMessage& MessageHandle, const HTuple& GenParamName, const HTuple& GenParamValue) const

static void HOperatorSet.EnqueueMessage(HTuple queueHandle, HTuple messageHandle, HTuple genParamName, HTuple genParamValue)

void HMessageQueue.EnqueueMessage(HMessage[] messageHandle, HTuple genParamName, HTuple genParamValue)

void HMessageQueue.EnqueueMessage(HMessage messageHandle, HTuple genParamName, HTuple genParamValue)

def enqueue_message(queue_handle: HHandle, message_handle: MaybeSequence[HHandle], gen_param_name: Sequence[str], gen_param_value: Sequence[Union[int, float, str]]) -> None

Beschreibung

enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message reiht eine oder mehrere Nachrichtenobjekte in eine Warteschlange ein, die durch den Parameter QueueHandleQueueHandleQueueHandleQueueHandlequeueHandlequeue_handle referenziert wird. Die eingereihten Nachrichten können wieder durch den Operator dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message der Reihe nach ausgelesen werden.

Die einzureihenden Nachrichtenobjekte (vgl. create_messagecreate_messageCreateMessageCreateMessageCreateMessagecreate_message) werden im Parameter MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle übergeben welcher sowohl einzelne als auch Tupel von Nachrichtenobjekten akzeptiert. Wenn mehrere Nachrichtenobjekte zusammen der Warteschlange angehängt werden, werden diese auch wieder zusammen durch den Operator dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message ausgegeben.

Es können gleichzeitig sowohl mehrere Erzeuger (enqueuing) Threads zu einer Warteschlange Nachrichten schicken als auch mehrere Verbraucher (dequeuing) Threads aus der gleichen Warteschlange Nachrichten holen. Die Warteschlange ist als FIFO (first-in first-out) Puffer organisiert, wobei jede Nachricht unabhängig vom Thread nur einmal aus der Warteschlange ausgelesen werden kann.

Der Zugriff auf die Warteschlange ist intern synchronisiert, so dass vom Benutzer keine zusätzlichen externen Synchronisationsmaßnahmen notwendig sind. Wenn die Warteschlange leer ist und mindestens ein Verbraucherthread auf eine Nachricht in dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message wartet, erhält einer der wartenden Threads eine Nachricht und wird aufgeweckt, sobald ein Erzeugerthread mit Hilfe von enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message ebendiese Nachricht erfolgreich in die Warteschlange gestellt hat. Andernfalls wird die Nachricht an die Warteschlange asynchron angehängt, um an einen Verbraucherthread weitergereicht zu werden, sobald dieser bereit ist die Nachricht zu entnehmen.

enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message kopiert die Nachricht in die Warteschlange, weshalb das ursprüngliche Nachrichtenobjekt danach sofort weiterverwendet werden kann, ohne das kopierte Nachrichtenobjekt zu beeinflussen.

Die Parameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value sind für zukünftige Erweiterungen des Operators reserviert. Es werden aktuell keine generischen Parameterwerte unterstützt.

Falls die Warteschlange nach der Operation eine größere Anzahl von Nachrichten halten würde als die spezifizierte Maximalanzahl, wird der Fehler H_ERR_MQOVL zurückgegeben. Die Maximalanzahl von gehaltenen Nachrichten wird über den Parameterwert 'max_message_num'"max_message_num""max_message_num""max_message_num""max_message_num""max_message_num" im Operator set_message_queue_paramset_message_queue_paramSetMessageQueueParamSetMessageQueueParamSetMessageQueueParamset_message_queue_param festgelegt.

Ausführungsinformationen

Parameter

QueueHandleQueueHandleQueueHandleQueueHandlequeueHandlequeue_handle (input_control)  message_queue HMessageQueue, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Warteschlangenobjekt.

Parameteranzahl: QueueHandle == 1

Restriktion: QueueHandle != 0

MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle (input_control)  message(-array) HMessage, HTupleMaybeSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Einzureihende Nachrichtenobjekte.

Parameteranzahl: MessageHandle > 0

Restriktion: MessageHandle != 0

GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (input_control)  string-array HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Namen generischer Parameter.

Parameteranzahl: GenParamName == GenParamValue

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (input_control)  tuple-array HTupleSequence[Union[int, float, str]]HTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)

Werte generischer Parameter.

Parameteranzahl: GenParamName == GenParamValue

Beispiel (HDevelop)

create_message_queue (Queue)
* ...
create_message (Message)
set_message_tuple (Message, 'mixed_tuple', ['The answer', 42])
enqueue_message (Queue, Message, [], [])

Ergebnis

Im Erfolgsfall gibt enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message den Wert 2 (H_MSG_TRUE) zurück. Andernfalls wird eine Fehlerbehandlung durchgeführt. Mögliche Fehler können ungültige Parameter oder Allokierungsfehler sein.

Vorgänger

set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTupleset_message_tuple, set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObjset_message_obj

Siehe auch

create_message_queuecreate_message_queueCreateMessageQueueCreateMessageQueueCreateMessageQueuecreate_message_queue, clear_message_queueclear_message_queueClearMessageQueueClearMessageQueueClearMessageQueueclear_message_queue, dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message, set_message_queue_paramset_message_queue_paramSetMessageQueueParamSetMessageQueueParamSetMessageQueueParamset_message_queue_param, get_message_queue_paramget_message_queue_paramGetMessageQueueParamGetMessageQueueParamGetMessageQueueParamget_message_queue_param, create_messagecreate_messageCreateMessageCreateMessageCreateMessagecreate_message, clear_messageclear_messageClearMessageClearMessageClearMessageclear_message, set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTupleset_message_tuple, get_message_tupleget_message_tupleGetMessageTupleGetMessageTupleGetMessageTupleget_message_tuple, set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObjset_message_obj, get_message_objget_message_objGetMessageObjGetMessageObjGetMessageObjget_message_obj

Modul

Foundation