create_message
— Erzeugen einer neuen Nachricht.
create_message( : : : MessageHandle)
create_message
erzeugt eine neue leere Nachricht. Der
Ausgabeparameter MessageHandle
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_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_obj
und set_message_tuple
gespeichert und können über die Operatoren get_message_obj
und get_message_tuple
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_tuple
oder set_message_obj
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_message
können
Nachrichten aus mehreren Erzeuger-Threads an eine Warteschlange
angehängt und über den Operator dequeue_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_message
kopiert die Nachricht in die Warteschlange,
weshalb das ursprüngliche Nachrichtenobjekt danach sofort weiterverwendet
werden kann, ohne das kopierte Nachrichtenobjekt zu beeinflussen.
MessageHandle
(output_control) message →
(handle)
Nachrichtenobjekt.
Parameteranzahl: MessageHandle == 1
Zusicherung: MessageHandle != 0
MessageHandles := [] for idx := 0 to 4 by 1 create_message (MessageHandle) MessageHandles[idx]:= MessageHandle endfor * ...
create_message
liefert den Wert 2 (H_MSG_TRUE), sofern kein
Allokierungsfehler auftritt.
set_message_tuple
,
set_message_obj
clear_message
,
set_message_tuple
,
get_message_tuple
,
set_message_obj
,
get_message_obj
,
set_message_param
,
get_message_param
,
enqueue_message
,
dequeue_message
Foundation