KlassenKlassen | | Operatoren

create_messagecreate_messageCreateMessageCreateMessage (Operator)

Name

create_messagecreate_messageCreateMessageCreateMessage — Erzeugen einer neuen Nachricht.

Signatur

create_message( : : : MessageHandle)

Herror create_message(Hlong* 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. Es erlaubt eine beliebige Anzahl von Daten zu speichern, welche mit Hilfe eines eindeutigen Schlüsselwortes (String) identifiziert werden. Jedes Schlüsselwort 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.

Die erzeugten Nachrichten können 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.

Wenn die Nachricht nicht mehr verwendet wird, können alle mit der Nachricht verbundenen Ressourcen, insbesondere die gespeicherten Tupeldaten und ikonischen Objekte, mit Hilfe des Operators clear_messageclear_messageClearMessageClearMessageClearMessage freigegeben werden.

Ausführungsinformationen

Parameter

MessageHandleMessageHandleMessageHandleMessageHandlemessageHandle (output_control)  message HMessage, HTupleHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)

Nachrichtenobjekt.

Parameteranzahl: MessageHandle == 1

Zusicherung: MessageHandle != 0

Beispiel (HDevelop)

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

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

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


KlassenKlassen | | Operatoren