|  | libhomegear-base
    0.7
    Base library for Homegear and Homegear family modules. | 
This class implements a queue after the producer-consumer paradigm. More...
#include <IQueue.h>
 
  
 | Public Member Functions | |
| IQueue (SharedObjects *baseLib, uint32_t queueCount, uint32_t bufferSize) | |
| Constructor.  More... | |
| virtual | ~IQueue () | 
| void | startQueue (int32_t index, bool waitWhenFull, uint32_t processingThreadCount, int32_t threadPriority=0, int32_t threadPolicy=SCHED_OTHER) | 
| Starts the threads of a queue.  More... | |
| void | startQueue (int32_t index, bool waitWhenFull, uint32_t initialProcessingThreadCount, uint32_t maxProcessingThreadCount) | 
| Starts the threads of a queue using a thread count that can be increased later.  More... | |
| void | stopQueue (int32_t index) | 
| Stops the threads of a queue previously started with startQueue().  More... | |
| bool | queueIsStarted (int32_t index) | 
| Checks if the specified queue has been started.  More... | |
| bool | addThread (int32_t index) | 
| Start an additional thread.  More... | |
| bool | enqueue (int32_t index, std::shared_ptr< IQueueEntry > &entry, bool waitWhenFull=false) | 
| Enqueues an item.  More... | |
| virtual void | processQueueEntry (int32_t index, std::shared_ptr< IQueueEntry > &entry)=0 | 
| This method is called by the processing threads for each item to process.  More... | |
| bool | queueEmpty (int32_t index) | 
| Checks if a queue is empty.  More... | |
| uint32_t | processingThreadCount (int32_t index) | 
| Returns the number of processing threads.  More... | |
| uint32_t | maxProcessingThreadCount (int32_t index) | 
| Returns the maximum number of processing threads.  More... | |
| int32_t | queueSize (int32_t index) | 
| Returns the number of items queued in a queue.  More... | |
| double | threadLoad (int32_t index) | 
| double | maxThreadLoad (int32_t index) | 
| double | maxThreadLoad1m (int32_t index) | 
| double | maxThreadLoad10m (int32_t index) | 
| double | maxThreadLoad1h (int32_t index) | 
| int64_t | maxWait (int32_t index) | 
| int64_t | maxWait1m (int32_t index) | 
| int64_t | maxWait10m (int32_t index) | 
| int64_t | maxWait1h (int32_t index) | 
|  Public Member Functions inherited from BaseLib::IQueueBase | |
| IQueueBase (SharedObjects *baseLib, uint32_t queueCount) | |
| virtual | ~IQueueBase () | 
| void | printQueueFullError (BaseLib::Output &out, const std::string &message) | 
| Prints a rate limited (1 output per 10 seconds) error message and keeps count of error messages.  More... | |
| Additional Inherited Members | |
|  Protected Attributes inherited from BaseLib::IQueueBase | |
| SharedObjects * | _bl = nullptr | 
| int32_t | _queueCount = 2 | 
| std::unique_ptr< std::atomic_bool[]> | _stopProcessingThread | 
| std::atomic< uint32_t > | _droppedEntries {0} | 
| std::atomic< int64_t > | _lastQueueFullError {0} | 
This class implements a queue after the producer-consumer paradigm.
It can manage one or more queues. Your class needs to be derived from IQueue to use it. 
| BaseLib::IQueue::IQueue | ( | SharedObjects * | baseLib, | 
| uint32_t | queueCount, | ||
| uint32_t | bufferSize | ||
| ) | 
Constructor.
| baseLib | A base library object. | 
| queueCount | The number of queues to initialize. | 
| bufferSize | The maximum number of items allowed to be queued. | 
| 
 | virtual | 
| bool BaseLib::IQueue::addThread | ( | int32_t | index | ) | 
Start an additional thread.
| index | The index of the queue to add the new thread. | 
| bool BaseLib::IQueue::enqueue | ( | int32_t | index, | 
| std::shared_ptr< IQueueEntry > & | entry, | ||
| bool | waitWhenFull = false | ||
| ) | 
Enqueues an item.
| index | The index of the queue to enqueue the item into. | 
| entry | The item to queue. | 
| waitWhenFull | When set to truethe method waits until the queue is empty enough to queue the item. WhenwaitWhenFullis set totrueinstartQueue(), this argument is ignored. | 
true if the item was successfully queued and false otherwise. | uint32_t BaseLib::IQueue::maxProcessingThreadCount | ( | int32_t | index | ) | 
Returns the maximum number of processing threads.
| double BaseLib::IQueue::maxThreadLoad | ( | int32_t | index | ) | 
| double BaseLib::IQueue::maxThreadLoad10m | ( | int32_t | index | ) | 
| double BaseLib::IQueue::maxThreadLoad1h | ( | int32_t | index | ) | 
| double BaseLib::IQueue::maxThreadLoad1m | ( | int32_t | index | ) | 
| int64_t BaseLib::IQueue::maxWait | ( | int32_t | index | ) | 
| int64_t BaseLib::IQueue::maxWait10m | ( | int32_t | index | ) | 
| int64_t BaseLib::IQueue::maxWait1h | ( | int32_t | index | ) | 
| int64_t BaseLib::IQueue::maxWait1m | ( | int32_t | index | ) | 
| uint32_t BaseLib::IQueue::processingThreadCount | ( | int32_t | index | ) | 
Returns the number of processing threads.
| 
 | pure virtual | 
This method is called by the processing threads for each item to process.
It needs to be implemented by the derived class.
| index | The index of the queue. | 
| entry | The queued item to process. | 
| bool BaseLib::IQueue::queueEmpty | ( | int32_t | index | ) | 
Checks if a queue is empty.
| index | The index of the queue to check. | 
true if the queue is empty. | bool BaseLib::IQueue::queueIsStarted | ( | int32_t | index | ) | 
Checks if the specified queue has been started.
| int32_t BaseLib::IQueue::queueSize | ( | int32_t | index | ) | 
Returns the number of items queued in a queue.
| index | The index of the queue to check. | 
| void BaseLib::IQueue::startQueue | ( | int32_t | index, | 
| bool | waitWhenFull, | ||
| uint32_t | processingThreadCount, | ||
| int32_t | threadPriority = 0, | ||
| int32_t | threadPolicy = SCHED_OTHER | ||
| ) | 
Starts the threads of a queue.
| index | The index of the queue to start. The number of queues is defined by queueCountin the constructor. | 
| waitWhenFull | When set to true,enqueue()waits until the queue is empty enough to queue the provided item. This takes precedence over the argumentwaitWhenFullofenqueue(). | 
| processingThreadCount | The number of processing threads to start. | 
| threadPriority | The thread priority to set. Default is 0(= disabled). The thread priority values depends onthreadPolicy. Seeman schedfor more details. | 
| threadPolicy | The thread policy to use. Default is SCHED_OTHER(= disabled). Seeman schedfor more details. | 
| void BaseLib::IQueue::startQueue | ( | int32_t | index, | 
| bool | waitWhenFull, | ||
| uint32_t | initialProcessingThreadCount, | ||
| uint32_t | maxProcessingThreadCount | ||
| ) | 
Starts the threads of a queue using a thread count that can be increased later.
| index | The index of the queue to start. The number of queues is defined by queueCountin the constructor. | 
| waitWhenFull | When set to true,enqueue()waits until the queue is empty enough to queue the provided item. This takes precedence over the argumentwaitWhenFullofenqueue(). | 
| initialProcessingThreadCount | The number of processing threads to start with the call of this method. | 
| maxProcessingThreadCount | The number maximum number of processing threads that can be started. | 
| void BaseLib::IQueue::stopQueue | ( | int32_t | index | ) | 
Stops the threads of a queue previously started with startQueue(). 
| index | The index of the queue to stop. | 
| double BaseLib::IQueue::threadLoad | ( | int32_t | index | ) |