TSDuck v3.40-3963
MPEG Transport Stream Toolkit
|
Template message queue for inter-thread communication with priority. More...
#include <tsMessagePriorityQueue.h>
Public Types | |
using | MessagePtr = std::shared_ptr< MSG > |
Safe pointer to messages. | |
Public Member Functions | |
MessagePriorityQueue (size_t maxMessages=0) | |
Constructor. | |
void | clear () |
Clear the content of the queue. | |
void | dequeue (MessagePtr &msg) |
Remove a message from the queue. | |
bool | dequeue (MessagePtr &msg, cn::milliseconds timeout) |
Remove a message from the queue. | |
void | enqueue (MessagePtr &msg) |
Insert a message in the queue. | |
bool | enqueue (MessagePtr &msg, cn::milliseconds timeout) |
Insert a message in the queue. | |
void | enqueue (MSG *msg) |
Insert a message in the queue. | |
bool | enqueue (MSG *msg, cn::milliseconds timeout) |
Insert a message in the queue. | |
void | forceEnqueue (MessagePtr &msg) |
Insert a message in the queue, even if the queue is full. | |
void | forceEnqueue (MSG *msg) |
Insert a message in the queue, even if the queue is full. | |
size_t | getMaxMessages () const |
Get the maximum allowed messages in the queue. | |
MessagePtr | peek () |
Peek the next message from the queue, without dequeueing it. | |
void | setMaxMessages (size_t maxMessages) |
Change the maximum allowed messages in the queue. | |
Protected Types | |
using | MessageList = std::list< MessagePtr > |
Queues are implemented as list of smart pointers to messages. | |
using | SuperClass = MessageQueue< MSG > |
Explicit reference to superclass. | |
Protected Member Functions | |
virtual MessageList::iterator | dequeuePlacement (MessageList &list) |
This virtual protected method performs dequeue location in the message queue. | |
virtual MessageList::iterator | enqueuePlacement (const MessagePtr &msg, MessageList &list) |
This virtual protected method performs placement in the message queue. | |
virtual SuperClass::MessageList::iterator | enqueuePlacement (const typename SuperClass::MessagePtr &msg, typename SuperClass::MessageList &list) override |
This virtual protected method performs placement in the message queue. | |
Template message queue for inter-thread communication with priority.
The ts::MessagePriorityQueue template class implements a synchronized access to a shared queue of generic messages. Each message has a priority. Messages with higher priority are deqeued first. Messages with equal priority are dequeued in their enqueueing order.
MSG | The type of the messages to exchange. |
COMPARE | A function object to sort MSG instances. By default, the '<' operator on MSG is used. |
|
inherited |
Safe pointer to messages.
Since data are copied from the producer thread into the queue and later copied again from the queue into the consumer thread, the copied data is always a shared pointer to the actual message content.
|
inline |
Constructor.
[in] | maxMessages | Maximum number of messages in the queue. When a thread attempts to enqueue a message and the queue is full, the thread waits until at least one message is dequeued. If maxMessages is 0, the queue is unlimited. In that case, the logic of the application must ensure that the queue is bounded somehow, otherwise the queue may exhaust all the process memory. |
|
overrideprotectedvirtual |
This virtual protected method performs placement in the message queue.
[in] | msg | The message to enqueue. |
[in] | list | The content of the queue. |
|
inherited |
Get the maximum allowed messages in the queue.
|
inherited |
Change the maximum allowed messages in the queue.
[in] | maxMessages | Maximum number of messages in the queue. When a thread attempts to enqueue a message and the queue is full, the thread waits until at least one message is dequeued. If maxMessages is 0, the queue is unlimited. In that case, the logic of the application must ensure that the queue is bounded somehow, otherwise the queue may exhaust all the process memory. |
|
inherited |
Insert a message in the queue.
If the queue is full, the calling thread waits until some space becomes available in the queue.
[in,out] | msg | The message to enqueue. The ownership of the pointed object is transfered to the message queue. Upon return, the msg safe pointer becomes a null pointer if the message was successfully enqueued. |
|
inherited |
Insert a message in the queue.
If the queue is full, the calling thread waits until some space becomes available in the queue or the timeout expires.
[in,out] | msg | The message to enqueue. The ownership of the pointed object is transfered to the message queue. Upon return, the msg safe pointer becomes a null pointer if the message was successfully enqueued (no timeout). |
[in] | timeout | Maximum time to wait in milliseconds. |
|
inherited |
Insert a message in the queue.
[in] | msg | A pointer to the message to enqueue. This pointer shall not be owned by a safe pointer. When the message is successfully enqueued, the pointer becomes owned by a safe pointer and will be deallocated when no longer used. |
|
inherited |
Insert a message in the queue.
[in] | msg | A pointer to the message to enqueue. This pointer shall not be owned by a safe pointer. When the message is successfully enqueued, the pointer becomes owned by a safe pointer and will be deallocated when no longer used. In case of timeout, the object is not equeued and immediately deallocated. |
[in] | timeout | Maximum time to wait in milliseconds. |
|
inherited |
Insert a message in the queue, even if the queue is full.
This method immediately inserts the message, even if the queue is full. This can be used to allow exceptional overflow of the queue with unique messages, to enqueue a message to instruct the consumer thread to terminate for instance.
[in,out] | msg | The message to enqueue. The ownership of the pointed object is transfered to the message queue. Upon return, the msg safe pointer becomes a null pointer. |
|
inherited |
Insert a message in the queue, even if the queue is full.
This method immediately inserts the message, even if the queue is full. This can be used to allow exceptional overflow of the queue with unique messages, to enqueue a message to instruct the consumer thread to terminate for instance.
[in] | msg | A pointer to the message to enqueue. This pointer shall not be owned by a safe pointer. When the message is enqueued, the pointer becomes owned by a safe pointer and will be deallocated when no longer used. |
|
inherited |
Remove a message from the queue.
Wait until a message is received.
[out] | msg | Received message. |
|
inherited |
Remove a message from the queue.
Wait until a message is received or the timeout expires.
[out] | msg | Received message. |
[in] | timeout | Maximum time to wait in milliseconds. If timeout is zero and the queue is empty, return immediately. |
|
inherited |
Peek the next message from the queue, without dequeueing it.
If several threads simultaneously read from the queue, the returned message may be deqeued in the meantime by another thread.
|
protectedvirtualinherited |
This virtual protected method performs placement in the message queue.
[in] | msg | The message to enqueue later. The message is not enqueued. Its value is used to compute the place where it should be inserted. |
[in] | list | The content of the queue. |
|
protectedvirtualinherited |
This virtual protected method performs dequeue location in the message queue.
[in] | list | The content of the queue. |