C
MessageQueueInterface 类
类 Qul::Platform::MessageQueueInterface提供特定平台队列的接口类,供 Qt Quick Ultralite 使用。 更多...
头文件 | #include <platform/messagequeue.h> |
自 | Qt Quick Ultralite (Platform) 1.9 |
公共函数
虚拟 | ~MessageQueueInterface() |
虚拟 uint32_t | capacity() const = 0 |
虚拟 void | clearOverrun() = 0 |
虚拟 bool | discardSupported() const = 0 |
虚拟 Qul::Platform::MessageQueueStatus | enqueueOrDiscard(const void *message) = 0 |
虚拟 Qul::Platform::MessageQueueStatus | enqueueOrDiscardFromInterrupt(const void *message) |
虚拟 Qul::Platform::MessageQueueStatus | enqueueOrOverwrite(const void *message) = 0 |
虚拟 Qul::Platform::MessageQueueStatus | enqueueOrOverwriteFromInterrupt(const void *message) |
虚拟 bool | isEmpty() const = 0 |
虚拟 bool | isEmptyFromInterrupt() const |
虚拟 bool | isOverrun() const = 0 |
虚拟 bool | overwriteSupported() const = 0 |
虚拟 Qul::Platform::MessageQueueStatus | receive(void *message, int32_t timeout = 0) = 0 |
虚拟 Qul::Platform::MessageQueueStatus | receiveFromInterrupt(void *message, int32_t timeout = 0) |
受保护函数
详细描述
Qt Quick Ultralite 使用此接口实现 EventQueues 的队列。在有自己实现的队列(或操作系统提供的)时非常有用,并优于 Qt Quick Ultralite 提供的默认实现。
默认情况下,enqueueOrDiscardFromInterrupt()、enqueueOrOverwriteFromInterrupt() 和 receiveFromInterrupt() 会调用它们各自的非中断版本。除非底层队列功能是中断安全的或采取了确保中断安全的措施,否则这些函数必须被重写。*
通过从 discardSupported() 和 overwriteSupported() 函数返回布尔值来表示对丢弃和/或覆盖的支持。
注意:必须支持其中一个或两个操作,以确保事件队列能够按预期工作。
示例
MessageQueueInterface 是使用一个简单的环形缓冲区实现的。
队列实现不支持覆盖,因此所有无法推入队列的消息都会被丢弃。
子类可能看起来像这样
class MyMessageQueue : public MessageQueueInterface { public: MyMessageQueue(const uint32_t &capacity, const uint32_t &messageSize) : MessageQueueInterface() , mQueue(NULL) , mOverrunFlag(false) { void *memory = qul_malloc(sizeof(Private::CircularBuffer)); mQueue = new (memory) Private::CircularBuffer(capacity, messageSize); } ~MyMessageQueue() { mQueue->~CircularBuffer(); qul_free(mQueue); } MessageQueueStatus enqueueOrDiscard(const void *message) QUL_DECL_OVERRIDE { if (mQueue->isFull()) { // Discard message mOverrunFlag = true; return MessageQueueStatus::MessageDiscarded; } mQueue->pushBack(message); return MessageQueueStatus::Success; } MessageQueueStatus enqueueOrDiscardFromInterrupt(const void *message) QUL_DECL_OVERRIDE { // disableInterrupts(); MessageQueueStatus state = enqueueOrDiscard(message); // enableInterrupts(); return state; } MessageQueueStatus enqueueOrOverwrite(const void *message) QUL_DECL_OVERRIDE { return MessageQueueStatus::OverwriteNotSupported; } MessageQueueStatus receive(void *message, int32_t timeout = 0) QUL_DECL_OVERRIDE { (void) timeout; // This example does not implement timeout handling. if (mQueue->isEmpty()) return MessageQueueStatus::EmptyQueue; mQueue->popFront(message); return MessageQueueStatus::Success; } MessageQueueStatus receiveFromInterrupt(void *message, int32_t timeout = 0) QUL_DECL_OVERRIDE { (void) timeout; // This example does not implement timeout handling. // disableInterrupts(); MessageQueueStatus state = receive(message); // enableInterrupts(); return state; } bool discardSupported() const QUL_DECL_OVERRIDE { return true; } bool overwriteSupported() const QUL_DECL_OVERRIDE { return false; } bool isEmpty() const QUL_DECL_OVERRIDE { return mQueue->isEmpty(); } bool isEmptyFromInterrupt() const QUL_DECL_OVERRIDE { // disableInterrupts(); return isEmpty(); // enableInterrupts(); } bool isOverrun() const QUL_DECL_OVERRIDE { return mOverrunFlag; } void clearOverrun() QUL_DECL_OVERRIDE { mOverrunFlag = false; } uint32_t capacity() const QUL_DECL_OVERRIDE { return mQueue->capacity(); } private: Private::CircularBuffer *mQueue; bool mOverrunFlag; };
之后,实现 Qul::Platform::requestQueue() 函数
MessageQueueInterface *requestQueue(size_t queueCapacity, size_t messageSize) { void *queue = qul_malloc(sizeof(MyMessageQueue)); if (queue == NULL) { return NULL; } MessageQueueInterface *interface = new (queue) MyMessageQueue(queueCapacity, messageSize); return interface; }
此外,实现 Qul::Platform::deleteQueue() 函数
void deleteQueue(MessageQueueInterface *queue) { MyMessageQueue *mq = static_cast<MyMessageQueue *>(queue); mq->~MyMessageQueue(); qul_free(mq); }
最后,实现 Qul::Platform::maxQueueMessageSize()
size_t maximumQueueMessageSize()
{
return LONG_MAX;
}
另请参阅:Qul::Platform::MessageQueue 和 Qul::EventQueue.
成员函数文档
[protected, since Qt Quick Ultralite (Platform) 1.9]
MessageQueueInterface::MessageQueueInterface()
构建 MessageQueueInterface。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅:~MessageQueueInterface().
[virtual, since Qt Quick Ultralite (Platform) 1.9]
MessageQueueInterface::~MessageQueueInterface()
销毁 MessageQueueInterface 类实例。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅:MessageQueueInterface().
[pure virtual, since Qt Quick Ultralite (Platform) 1.9]
uint32_t MessageQueueInterface::capacity() const
返回队列可以容纳的最大项目数。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
[pure virtual, since Qt Quick Ultralite (Platform) 1.9]
void MessageQueueInterface::clearOverrun()
清除队列的溢出状态。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅:isOverrun().
[pure virtual, since Qt Quick Ultralite (Platform) 1.9]
bool MessageQueueInterface::discardSupported() const
如果支持丢弃,则返回 true
。这意味着可以使用 enqueueOrDiscard() 和 enqueueOrDiscardFromInterrupt()。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅:overwriteSupported()、enqueueOrDiscard() 和 enqueueOrDiscardFromInterrupt().
[pure virtual, since Qt Quick Ultralite (Platform) 1.9]
Qul::Platform::MessageQueueStatus MessageQueueInterface::enqueueOrDiscard(const void *message)
将 message 添加到队列中,如果队列已满则丢弃它。返回 MessageQueueStatus 指示函数调用的结果。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 enqueueOrDiscardFromInterrupt(),discardSupported(),receive(),receiveFromInterrupt() 和 enqueueOrOverwrite。
[自 Qt Quick Ultralite (Platform) 1.9 起为虚函数]
Qul::Platform::MessageQueueStatus MessageQueueInterface::enqueueOrDiscardFromInterrupt(const void *message)
将消息 message 添加到队列或将它丢弃,如果队列已满。它与enqueueOrDiscard() 类似,但中断安全。默认实现调用 enqueueOrDiscard() 并传入 message。
返回指定函数调用结果的 MessageQueueStatus。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 enqueueOrDiscard,discardSupported,receive,receiveFromInterrupt 和 enqueueOrOverwriteFromInterrupt。
[自 Qt Quick Ultralite (Platform) 1.9 起为纯虚函数]
Qul::Platform::MessageQueueStatus MessageQueueInterface::enqueueOrOverwrite(const void *message)
将 message 添加到队列,或者如果队列已满,则覆盖它是队列中的最后一个项。返回指示函数调用结果的 MessageQueueStatus。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 enqueueOrOverwriteFromInterrupt,overwriteSupported,receive,receiveFromInterrupt 和 enqueueOrDiscard。
[自 Qt Quick Ultralite (Platform) 1.9 起为虚函数]
Qul::Platform::MessageQueueStatus MessageQueueInterface::enqueueOrOverwriteFromInterrupt(const void *message)
将 message 添加到队列,或者如果队列已满,则覆盖它是队列中的最后一个项。它与 enqueueOrOverwrite 类似,但中断安全。默认实现调用 enqueueOrOverwrite() 并传入 message。
返回指定函数调用结果的 MessageQueueStatus。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 enqueueOrOverwrite,overwriteSupported,receive,receiveFromInterrupt 和 enqueueOrDiscardFromInterrupt。
[自 Qt Quick Ultralite (Platform) 1.9 起为纯虚函数]
bool MessageQueueInterface::isEmpty() const
如果队列为空则返回 true
;否则返回 false
。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 isEmptyFromInterrupt。
[自 Qt Quick Ultralite (Platform) 1.9 起为虚函数]
bool MessageQueueInterface::isEmptyFromInterrupt() const
如果队列为空则返回 true
;否则返回 false
。它与 isEmpty 类似,但中断安全。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 isEmpty。
【自从 Qt Quick Ultralite (Platform) 1.9 起为纯虚函数】
bool MessageQueueInterface::isOverrun() const
如果对列溢出(由于项目被丢弃或覆盖),则返回 true
。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 clearOverrun。
【自从 Qt Quick Ultralite (Platform) 1.9 起为纯虚函数】
bool MessageQueueInterface::overwriteSupported() const
如果支持覆盖,则返回 true
。这意味着可以使用 enqueueOrOverwrite() 和 enqueueOrOverwriteFromInterrupt()。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 discardSupported,enqueueOrOverwrite 和 enqueueOrOverwriteFromInterrupt。
【自 Qt Quick Ultralite (Platform) 1.9 起为虚函数】
Qul::Platform::MessageQueueStatus MessageQueueInterface::receive(void *message, int32_t timeout = 0)
从队列中返回第一条消息。成功时,message 必须包含弹出的消息和 MessageQueueStatus::Success。失败时,将返回适当的错误 MessageQueueStatus 以及一个空指针。如果指定了 timeout,则函数必须在 timeout 毫秒后才返回。零超时值表示函数完全不阻塞,而负值表示函数无限期等待。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 receiveFromInterrupt,enqueueOrDiscard,enqueueOrDiscardFromInterrupt,enqueueOrOverwrite 和 enqueueOrOverwriteFromInterrupt。
【虚函数,自 Qt Quick Ultralite (Platform) 1.9 起存在】
Qul::Platform::MessageQueueStatus MessageQueueInterface::receiveFromInterrupt(void *message, int32_t timeout = 0)
返回队列中的第一条消息。它与 receive 类似,但是中断安全的。默认实现调用 receive。与 receive 类似,使用 message 和 timeout,尽管在处理中断队列时不要使用超时。
此功能是在 Qt Quick Ultralite (Platform) 1.9 中引入的。
另请参阅 receive,enqueueOrDiscard,enqueueOrDiscardFromInterrupt,enqueueOrOverwrite 和 enqueueOrOverwriteFromInterrupt。
可在某些 Qt 许可证下使用。
了解更多信息。