create_messageT_create_messageCreateMessageCreateMessage (Operator)

Name

create_messageT_create_messageCreateMessageCreateMessage — 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()

Beschreibung

create_messagecreate_messageCreateMessageCreateMessageCreateMessage erzeugt eine neue leere Nachricht. Der Ausgabeparameter MessageHandleMessageHandleMessageHandleMessageHandlemessageHandle 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_dictCreateDictCreateDictCreateDict) 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_objSetMessageObjSetMessageObjSetMessageObj und set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTuple gespeichert und können über die Operatoren get_message_objget_message_objGetMessageObjGetMessageObjGetMessageObj und get_message_tupleget_message_tupleGetMessageTupleGetMessageTupleGetMessageTuple wieder ausgelesen werden.

Die Daten, welche in den Nachrichten referenziert werden, sind stets Kopien ihrer Originale. Damit können die originalen Daten, nachdem sie in der Nachricht durch die Operatoren set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTuple oder set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObj gespeichert wurden, verändert oder gelöscht werden, ohne die Nachricht selbst zu verändern. Eine Ausnahme bilden Handles, welche von HALCON als üblicher Integerwert behandelt werden. Beim Speichern eines Handles in einer Nachricht wird daher 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_messageEnqueueMessageEnqueueMessageEnqueueMessage können Nachrichten aus mehreren Erzeuger-Threads an eine Warteschlange angehängt und über den Operator dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessage 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_messageEnqueueMessageEnqueueMessageEnqueueMessage 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

MessageHandleMessageHandleMessageHandleMessageHandlemessageHandle (output_control)  message HMessage, HTupleHTupleHtuple (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_messageCreateMessageCreateMessageCreateMessage liefert den Wert 2 (H_MSG_TRUE), sofern kein Allokierungsfehler auftritt.

Nachfolger

set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTuple, set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObj

Alternativen

create_dictcreate_dictCreateDictCreateDictCreateDict

Siehe auch

clear_messageclear_messageClearMessageClearMessageClearMessage, set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTuple, get_message_tupleget_message_tupleGetMessageTupleGetMessageTupleGetMessageTuple, set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObj, get_message_objget_message_objGetMessageObjGetMessageObjGetMessageObj, set_message_paramset_message_paramSetMessageParamSetMessageParamSetMessageParam, get_message_paramget_message_paramGetMessageParamGetMessageParamGetMessageParam, enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessage, dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessage

Modul

Foundation