dequeue_messageT_dequeue_messageDequeueMessageDequeueMessagedequeue_message (Operator)

Name

dequeue_messageT_dequeue_messageDequeueMessageDequeueMessagedequeue_message — Empfangen einer oder mehrerer Nachrichten aus einer Warteschlange.

Signatur

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

Herror T_dequeue_message(const Htuple QueueHandle, const Htuple GenParamName, const Htuple GenParamValue, Htuple* MessageHandle)

void DequeueMessage(const HTuple& QueueHandle, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* MessageHandle)

HMessageArray HMessageQueue::DequeueMessage(const HTuple& GenParamName, const HTuple& GenParamValue) const

HMessage HMessageQueue::DequeueMessage(const HString& GenParamName, const HTuple& GenParamValue) const

HMessage HMessageQueue::DequeueMessage(const char* GenParamName, const HTuple& GenParamValue) const

HMessage HMessageQueue::DequeueMessage(const wchar_t* GenParamName, const HTuple& GenParamValue) const   (Nur Windows)

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

HMessage[] HMessageQueue.DequeueMessage(HTuple genParamName, HTuple genParamValue)

HMessage HMessageQueue.DequeueMessage(string genParamName, HTuple genParamValue)

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

def dequeue_message_s(queue_handle: HHandle, gen_param_name: MaybeSequence[str], gen_param_value: MaybeSequence[Union[int, float, str]]) -> HHandle

Beschreibung

dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message empfängt eine Nachricht aus einer Warteschlange die in QueueHandleQueueHandleQueueHandleQueueHandlequeueHandlequeue_handle referenziert ist. Die Nachricht muss zuvor von einem beliebigen Thread mit Hilfe des Operators enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message in die Warteschlange eingereiht worden sein.

Die Nachrichten werden in FIFO (first-in first-out) Reihenfolge empfangen, wobei die Nachrichten unabhängig von der Anzahl der wartenden Threads jeweils nur einmal empfangen werden können. Falls die Warteschlange Nachrichten enthält, entnimmt dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message sofort die älteste Nachricht und gibt eine Referenz auf das Nachrichtenobjekt im Parameter MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle zurück. Der Besitz auf die Nachrichtendaten geht damit von der Warteschlange auf die zurückgegebene Nachrichtenreferenz über.

Falls die Warteschlange leer ist, wartet dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message bis ein Nachrichtenobjekt für die Entnahme aus der Warteschlange verfügbar ist (nachdem sie zuvor von einem anderen Thread in die Warteschlange mit Hilfe von enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message eingereiht wurde).

Die Daten, die ein Nachrichtenobjekt enthält können anschließend über die Operatoren get_message_paramget_message_paramGetMessageParamGetMessageParamGetMessageParamget_message_param, get_message_tupleget_message_tupleGetMessageTupleGetMessageTupleGetMessageTupleget_message_tuple oder get_message_objget_message_objGetMessageObjGetMessageObjGetMessageObjget_message_obj abgefragt werden.

Die Nachrichtenobjekte, die man von dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message erhält, können anschließend wiederverwendet, d.h. modifiziert und/oder in eine weitere Warteschlange eingereiht werden.

Falls mehrere Nachrichtenobjekte über einen einzelnen Aufruf von enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message in die Warteschlange eingereiht wurden, werden all diese Nachrichtenobjekte auch wieder zusammen durch einen einzelnen Aufruf von dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message der Warteschlange entnommen und als Tupel im Parameter MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle zurückgegeben.

Der Zugriff auf die Warteschlange ist intern synchronisiert. Es müssen daher keine weiteren Synchronisationsmaßnahmen getroffen werden.

Es kann z.B. während einer Rekonfiguration oder dem Aufräumen für eine Applikation notwendig werden, Threads die im Operator dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message auf Nachrichten warten aufzuwecken und die Operation abzubrechen. Dies erreicht man indem man den Operator set_message_queue_paramset_message_queue_paramSetMessageQueueParamSetMessageQueueParamSetMessageQueueParamset_message_queue_param mit dem Parameter 'abort_dequeuing'"abort_dequeuing""abort_dequeuing""abort_dequeuing""abort_dequeuing""abort_dequeuing" verwendet. In diesem Fall wird der blockierte Operator dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message sofort mit dem Fehler H_ERR_MQCNCL zurückkehren.

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

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

Spezifiziert eine Spanne für eine Zeitüberschreitung, welche bestimmt, wie lange der Operator auf eine Nachricht maximal warten soll, wenn die Warteschlange leer sein sollte. Wenn die Zeitspanne überschritten wurde, 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""infinite". Wenn keine Zeitüberschreitung angegeben wurde wird implizit eine unendliche Zeitspanne (infinite) angenommen und der Operator blockiert bis er ein Nachrichtenobjekt aus der Warteschlange entnehmen kann oder die Operation von außen abgebrochen wird.

Ausführungsinformationen

Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.

Parameter

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

Warteschlangenobjekt.

Parameteranzahl: QueueHandle == 1

Restriktion: QueueHandle != 0

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

Name der generischen Parameter

Parameteranzahl: GenParamName == GenParamValue

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

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

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

Werte der generischen Parameter

Parameteranzahl: GenParamName == GenParamValue

Defaultwert: 'infinite' "infinite" "infinite" "infinite" "infinite" "infinite"

Werteliste: 'infinite'"infinite""infinite""infinite""infinite""infinite"

MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle (output_control)  message(-array) HMessage, HTupleSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Entnommene Nachrichtenobjekte.

Parameteranzahl: MessageHandle > 0

Zusicherung: MessageHandle != 0

Beispiel (HDevelop)

create_message_queue (Queue)
* ...
dequeue_message (Queue, [], [], Message)
get_message_obj (Image, Message, 'my_image')

Ergebnis

Im Erfolgsfall gibt dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message den Wert TRUE zurück. Andernfalls wird eine Fehlerbehandlung durchgeführt. Mögliche Fehler können durch ungültige Parameter, Zeitüberschreitung (H_ERR_TIMEOUT) oder externes Abbrechen (H_ERR_MQCNCL) verursacht werden. Sollte in seltenen Fällen intern ein Fehler auftreten nachdem die Nachricht bereits aus der Queue genommen wurde, wird der Operator die Nachricht wieder an den Anfang der Warteschlange einreihen. Dies kann zu einer veränderten Reihenfolge der entnommenen Nachrichten führen, Wenn zwischenzeitlich ein anderer Thread eine Nachricht aus der Warteschlange entnommen hat.

Nachfolger

get_message_tupleget_message_tupleGetMessageTupleGetMessageTupleGetMessageTupleget_message_tuple, get_message_objget_message_objGetMessageObjGetMessageObjGetMessageObjget_message_obj, get_message_paramget_message_paramGetMessageParamGetMessageParamGetMessageParamget_message_param

Siehe auch

create_message_queuecreate_message_queueCreateMessageQueueCreateMessageQueueCreateMessageQueuecreate_message_queue, clear_message_queueclear_message_queueClearMessageQueueClearMessageQueueClearMessageQueueclear_message_queue, enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_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