Skip to content

create_message_queueCreateMessageQueueCreateMessageQueuecreate_message_queueT_create_message_queue🔗

Short description🔗

create_message_queueCreateMessageQueueCreateMessageQueuecreate_message_queueT_create_message_queue — Create a new empty message queue.

Signature🔗

create_message_queue( out message_queue QueueHandle )void CreateMessageQueue( HTuple* QueueHandle )static void HOperatorSet.CreateMessageQueue( out HTuple queueHandle )def create_message_queue( ) -> HHandle

Herror T_create_message_queue( Htuple* QueueHandle )

void HMessageQueue::HMessageQueue( )

public HMessageQueue( )

void HMessageQueue::CreateMessageQueue( )

void HMessageQueue.CreateMessageQueue( )

Description🔗

create_message_queueCreateMessageQueue creates a new empty message queue. The output parameter QueueHandlequeueHandlequeue_handle is a handle to the newly created message queue and is used to identify the queue in any subsequent operator calls using the queue.

The message queues are designed as FIFO pipes delivering arbitrary sets of data safely among different threads. The queue access is internally fully synchronized, no explicit locking is required from the application. The data is traveling through the queue in so called messages (see create_messageCreateMessage).

Multiple producer threads can append data simultaneously (enqueue_messageEnqueueMessage) while multiple consumer threads are simultaneously retrieving the data again (dequeue_messageDequeueMessage). Multiple messages can be enqueued together using a single enqueue_messageEnqueueMessage operation. In such case, those messages will travel together through the queue and will be delivered through a single dequeue_messageDequeueMessage call.

All the enqueued messages are copied by the enqueue_messageEnqueueMessage operation. The original message(s) can thus be immediately reused after the enqueue_messageEnqueueMessage call without affecting the enqueued copy.

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Processed without parallelization.

Parameters🔗

QueueHandlequeueHandlequeue_handle (output_control) message_queue → (handle)HTuple (HHandle)HMessageQueue, HTuple (IntPtr)HHandleHtuple (handle)

Handle of the newly created message queue.

Number of elements: QueueHandle == 1
Assertion: QueueHandle != 0

Example🔗

(HDevelop)

create_message_queue (ProducerQueue)
create_message_queue (ResultQueue)
* ...

Result🔗

Returns 2 (H_MSG_TRUE) unless a resource allocation error occurs. Otherwise an exception is raised.

Combinations with other operators🔗

Combinations

Possible successors

enqueue_messageEnqueueMessage, dequeue_messageDequeueMessage

See also

clear_message_queueClearMessageQueue, enqueue_messageEnqueueMessage, dequeue_messageDequeueMessage, set_message_queue_paramSetMessageQueueParam, get_message_queue_paramGetMessageQueueParam, create_messageCreateMessage, clear_messageClearMessage, set_message_tupleSetMessageTuple, get_message_tupleGetMessageTuple, set_message_objSetMessageObj, get_message_objGetMessageObj

Module🔗

Foundation