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_messageEnqueueMessageEnqueueMessageenqueue_message reiht eine oder mehrere Nachrichtenobjekte in eine Warteschlange ein, die durch den Parameter QueueHandleQueueHandleQueueHandlequeueHandlequeue_handle referenziert wird. Die eingereihten Nachrichten können wieder durch den Operator dequeue_messagedequeue_messageDequeueMessageDequeueMessagedequeue_message der Reihe nach ausgelesen werden.

Die einzureihenden Nachrichtenobjekte (vgl. create_messagecreate_messageCreateMessageCreateMessagecreate_message) werden im Parameter MessageHandleMessageHandleMessageHandlemessageHandlemessage_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_messageDequeueMessageDequeueMessagedequeue_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_messageDequeueMessageDequeueMessagedequeue_message wartet, erhält einer der wartenden Threads eine Nachricht und wird aufgeweckt, sobald ein Erzeugerthread mit Hilfe von enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageenqueue_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_messageEnqueueMessageEnqueueMessageenqueue_message kopiert die Nachricht in die Warteschlange, weshalb das ursprüngliche Nachrichtenobjekt danach sofort weiterverwendet werden kann, ohne das kopierte Nachrichtenobjekt zu beeinflussen.

Falls die Warteschlange nach der Operation eine größere Anzahl von Nachrichten halten würde als die spezifizierte Maximalanzahl, wird entweder der Fehler H_ERR_MQOVL zurückgegeben oder gewartet bis Platz in der Warteschlange frei wird. Das Verhalten kann für die Warteschlange mittels dem Parameter 'wait_on_full'"wait_on_full""wait_on_full""wait_on_full""wait_on_full" im Operator set_message_queue_paramset_message_queue_paramSetMessageQueueParamSetMessageQueueParamset_message_queue_param gesetzt werden. Die Maximalanzahl von gehaltenen Nachrichten wird über den Parameterwert 'max_message_num'"max_message_num""max_message_num""max_message_num""max_message_num" im Operator set_message_queue_paramset_message_queue_paramSetMessageQueueParamSetMessageQueueParamset_message_queue_param festgelegt. Falls mehr Nachrichten eingereiht werden sollen als die spezifizierte Maximalanzahl, d.h. falls das Tupel MessageHandleMessageHandleMessageHandlemessageHandlemessage_handle mehr Einträge hat als 'max_message_num'"max_message_num""max_message_num""max_message_num""max_message_num", so gibt enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageenqueue_message immer den Fehler H_ERR_MQOVL zurück, unabhängig von der Einstellung von 'wait_on_full'"wait_on_full""wait_on_full""wait_on_full""wait_on_full".

Es ist möglich das Verhalten von enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageenqueue_message durch die generischen Parameter GenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValuegenParamValuegen_param_value zu beeinflussen. Aktuell wird nur ein einziger Parameter unterstützt:

'timeout'"timeout""timeout""timeout""timeout":

Spezifiziert wie lange der Operator maximal warten soll, wenn die Warteschlange voll ist und 'wait_on_full'"wait_on_full""wait_on_full""wait_on_full""wait_on_full" auf 'true'"true""true""true""true" gesetzt ist. Im Falle einer Zeitüberschreitung kehrt der Operator mit dem Fehler H_ERR_TIMEOUT zurück.

Die Spanne für die Zeitüberschreitung kann als Integer- oder Doublewert in Sekunden angegeben werden oder durch den String 'infinite'"infinite""infinite""infinite""infinite". Wenn keine Zeitüberschreitung angegeben wurde wird implizit eine unendliche Zeitspanne (infinite) angenommen und der Operator blockiert bis er das oder die Nachrichtenobjekte in die Warteschlange einreihen kann oder die Operation von außen abgebrochen wird.

Wertevorschläge: -1, 'infinite'"infinite""infinite""infinite""infinite", 1, 10

Default: -1

Ausführungsinformationen

Parameter

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

Warteschlangenobjekt.

Parameteranzahl: QueueHandle == 1

Restriktion: QueueHandle != 0

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

Einzureihende Nachrichtenobjekte.

Parameteranzahl: MessageHandle > 0

Restriktion: MessageHandle != 0

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

Namen generischer Parameter.

Parameteranzahl: GenParamName == GenParamValue

GenParamValueGenParamValueGenParamValuegenParamValuegen_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_messageEnqueueMessageEnqueueMessageenqueue_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_tupleSetMessageTupleSetMessageTupleset_message_tuple, set_message_objset_message_objSetMessageObjSetMessageObjset_message_obj

Siehe auch

create_message_queuecreate_message_queueCreateMessageQueueCreateMessageQueuecreate_message_queue, clear_message_queueclear_message_queueClearMessageQueueClearMessageQueueclear_message_queue, dequeue_messagedequeue_messageDequeueMessageDequeueMessagedequeue_message, set_message_queue_paramset_message_queue_paramSetMessageQueueParamSetMessageQueueParamset_message_queue_param, get_message_queue_paramget_message_queue_paramGetMessageQueueParamGetMessageQueueParamget_message_queue_param, create_messagecreate_messageCreateMessageCreateMessagecreate_message, clear_messageclear_messageClearMessageClearMessageclear_message, set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleset_message_tuple, get_message_tupleget_message_tupleGetMessageTupleGetMessageTupleget_message_tuple, set_message_objset_message_objSetMessageObjSetMessageObjset_message_obj, get_message_objget_message_objGetMessageObjGetMessageObjget_message_obj

Modul

Foundation