create_messageT_create_messageCreateMessageCreateMessagecreate_message (Operator)

Name

create_messageT_create_messageCreateMessageCreateMessagecreate_message — Erzeugen einer neuen Nachricht.

Signatur

create_message( : : : MessageHandle)

Herror T_create_message(Htuple* MessageHandle)

void CreateMessage(HTuple* MessageHandle)

void HMessage::HMessage()

void HMessage::CreateMessage()

static void HOperatorSet.CreateMessage(out HTuple messageHandle)

public HMessage()

void HMessage.CreateMessage()

def create_message() -> HHandle

Beschreibung

create_messagecreate_messageCreateMessageCreateMessageCreateMessagecreate_message erzeugt eine neue leere Nachricht. Der Ausgabeparameter MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle referenziert das erzeugte Nachrichtenobjekt und wird dazu verwendet, um die Nachricht in den nachfolgenden Operatoraufrufen identifizieren zu können.

Eine Nachricht ist ein Objekt, das ähnlich einem assoziativem Array (Wörterbuch) aufgebaut ist. Diese erzeugten Nachrichten können dann zwischen Threads einfach über eine Warteschlange für Nachrichten ausgetauscht werden. Alternativ dazu stehen in HALCON auch Dictionaries (create_dictcreate_dictCreateDictCreateDictCreateDictcreate_dict) zur Verfügung, um Parameter innerhalb von Programmen und Prozeduren zu gruppieren.

Nachrichten erlauben es, eine beliebige Anzahl von Daten zu speichern, welche mit Hilfe eines eindeutigen Schlüssels (String oder Integer) identifiziert werden. Jeder Schlüssel kann entweder einen Tupeldaten-Parameter oder ein ikonisches Objekt referenzieren. Diese Daten werden in der Nachricht mit Hilfe der Operatoren set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObjset_message_obj und set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTupleset_message_tuple gespeichert und können über die Operatoren get_message_objget_message_objGetMessageObjGetMessageObjGetMessageObjget_message_obj und get_message_tupleget_message_tupleGetMessageTupleGetMessageTupleGetMessageTupleget_message_tuple wieder ausgelesen werden.

Die Tuple-Parameter, welche in den Nachrichten referenziert werden, sind stets Kopien ihrer Originale. Damit können die originalen Daten, nachdem sie in der Nachricht mit set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTupleset_message_tuple gespeichert wurden, verändert oder gelöscht werden ohne die Nachricht selbst zu verändern. Eine Ausnahme bilden Handles: Beim Speichern eines Handles in einer Nachricht wird nur der Handle-Wert, nicht aber das Handle-Objekt selbst kopiert.

Wie bereits oben erwähnt können die erzeugten Nachrichten zwischen Threads einfach über eine Warteschlange für Nachrichten ausgetauscht werden. Mit Hilfe des Operators enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message können Nachrichten aus mehreren Erzeuger-Threads an eine Warteschlange angehängt und über den Operator dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message aus mehreren Verbraucher-Threads wieder aus der Warteschlange entnommen werden. All diese Operationen werden intern synchronisiert, so dass der Mechanismus über die Warteschlange ohne externe Synchronisation auskommt. 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.

Ausführungsinformationen

Parameter

MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle (output_control)  message HMessage, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Nachrichtenobjekt.

Parameteranzahl: MessageHandle == 1

Zusicherung: MessageHandle != 0

Beispiel (HDevelop)

MessageHandles := []
for idx := 0 to 4 by 1
  create_message (MessageHandle)
  MessageHandles[idx]:= MessageHandle
endfor
* ...

Ergebnis

create_messagecreate_messageCreateMessageCreateMessageCreateMessagecreate_message liefert den Wert 2 (H_MSG_TRUE), sofern kein Allokierungsfehler auftritt.

Nachfolger

set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTupleset_message_tuple, set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObjset_message_obj

Alternativen

create_dictcreate_dictCreateDictCreateDictCreateDictcreate_dict

Siehe auch

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, set_message_paramset_message_paramSetMessageParamSetMessageParamSetMessageParamset_message_param, get_message_paramget_message_paramGetMessageParamGetMessageParamGetMessageParamget_message_param, enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message, dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message

Modul

Foundation