create_messageT_create_messageCreateMessageCreateMessagecreate_message创建消息(算子)
名称
create_messageT_create_messageCreateMessageCreateMessagecreate_message — 创建新的空消息。
签名
def create_message() -> HHandle
描述
create_messagecreate_messageCreateMessageCreateMessageCreateMessagecreate_message 创建一个新的空消息。输出参数
MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle 是新创建消息的句柄,用于在后续调用算子时识别该消息。
该消息作为类似字典的容器,可通过异步消息队列在应用程序的线程间传递。此外,HALCON 还提供字典(create_dictcreate_dictCreateDictCreateDictCreateDictcreate_dict)功能,用于在程序和函数内分组参数。
消息可存储任意数量的条目,每个条目均拥有唯一键值(字符串或整数)及其关联值。每个键值可指向控制参数元组或图标对象。这些数据分别通过 set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTupleset_message_tuple 或 set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObjset_message_obj 存储至消息中,并可通过
get_message_tupleget_message_tupleGetMessageTupleGetMessageTupleGetMessageTupleget_message_tuple 或 get_message_objget_message_objGetMessageObjGetMessageObjGetMessageObjget_message_obj 再次提取。
消息中存储的控制参数元组始终是原始数据的深度副本。因此调用 set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTupleset_message_tuple 后原始数据可立即复用,且不影响消息内容。句柄是显著例外:存储句柄时仅复制句柄值,不复制其背后的资源。
如前所述,消息可通过异步消息队列在应用程序的线程间传递。多个生产者线程可使用 enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message 将数据追加至队列,多个接收者线程则可使用 dequeue_messagedequeue_messageDequeueMessageDequeueMessageDequeueMessagedequeue_message 从队列中提取数据。所有这些操作在内部均得到妥善同步。因此所有生产者和消费者均可安全访问队列,无需显式加锁。所有入队消息均由
enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message 操作复制生成。原始消息在调用 enqueue_messageenqueue_messageEnqueueMessageEnqueueMessageEnqueueMessageenqueue_message 后可立即被重复使用,且不影响队列中的副本。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 未采用并行化处理。
参数
MessageHandleMessageHandleMessageHandleMessageHandlemessageHandlemessage_handle (输出控制) message → HMessage, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
新创建消息的句柄。
元素数量:
MessageHandle == 1
断言:
MessageHandle != 0
示例(HDevelop)
MessageHandles := []
for idx := 0 to 4 by 1
create_message (MessageHandle)
MessageHandles[idx]:= MessageHandle
endfor
* ...
结果
除非发生资源分配错误,否则返回 2 (H_MSG_TRUE)。
可能的后继
set_message_tupleset_message_tupleSetMessageTupleSetMessageTupleSetMessageTupleset_message_tuple,
set_message_objset_message_objSetMessageObjSetMessageObjSetMessageObjset_message_obj
替代
create_dictcreate_dictCreateDictCreateDictCreateDictcreate_dict
另见
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
模块
基础