C
Qul::Platform::MessageQueueInterface Class
class Qul::Platform::MessageQueueInterfaceQt Quick Ultralite 向けに、プラットフォーム固有のキューを提供するインターフェースクラス。詳細...
| Header: | #include <platform/messagequeue.h> |
| Since: | Qt Quick Ultralite (Platform) 1.9 |
パブリック関数
(since Qt Quick Ultralite (Platform) 1.9) virtual | ~MessageQueueInterface() |
(since Qt Quick Ultralite (Platform) 1.9) virtual uint32_t | capacity() const = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual void | clearOverrun() = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual bool | discardSupported() const = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual Qul::Platform::MessageQueueStatus | enqueueOrDiscard(const void *message) = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual Qul::Platform::MessageQueueStatus | enqueueOrDiscardFromInterrupt(const void *message) |
(since Qt Quick Ultralite (Platform) 1.9) virtual Qul::Platform::MessageQueueStatus | enqueueOrOverwrite(const void *message) = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual Qul::Platform::MessageQueueStatus | enqueueOrOverwriteFromInterrupt(const void *message) |
(since Qt Quick Ultralite (Platform) 1.9) virtual bool | isEmpty() const = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual bool | isEmptyFromInterrupt() const |
(since Qt Quick Ultralite (Platform) 1.9) virtual bool | isOverrun() const = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual bool | overwriteSupported() const = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual Qul::Platform::MessageQueueStatus | receive(void *message, int32_t timeout = 0) = 0 |
(since Qt Quick Ultralite (Platform) 1.9) virtual Qul::Platform::MessageQueueStatus | receiveFromInterrupt(void *message, int32_t timeout = 0) |
プロテクトされた関数
(since Qt Quick Ultralite (Platform) 1.9) | MessageQueueInterface() |
詳細な説明
Qt Quick Ultralite は、このインターフェースを使用してEventQueues のキューを実装します。これは、独自のキュー実装(または OS が提供する実装)があり、Qt Quick Ultralite が提供するデフォルトの実装よりもそれを優先したい場合に役立ちます。
デフォルトでは、enqueueOrDiscardFromInterrupt()、enqueueOrOverwriteFromInterrupt()、およびreceiveFromInterrupt() は、それぞれ対応する非割り込みバージョンを呼び出します。基盤となるキュー機能が割り込みセーフであるか、割り込みセーフ性を確保するための措置が講じられている場合を除き、これらをオーバーライドする必要があります。
破棄および/または上書きのサポートは、discardSupported() およびoverwriteSupported() 関数からブール値を返すことで示されます。
注: EventQueue が期待どおりに機能するためには、これらの操作のうち少なくとも一方 、あるいは両方がサポートされている必要があります。
例
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 noexcept, 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()も参照してください 。
[virtual, since Qt Quick Ultralite (Platform) 1.9] Qul::Platform::MessageQueueStatus MessageQueueInterface::enqueueOrDiscardFromInterrupt(const void *message)
message をキューに追加するか、キューが満杯の場合は破棄します。これはenqueueOrDiscard()と似ていますが、割り込みセーフです。デフォルトの実装では、message を引数としてenqueueOrDiscard()を呼び出します。
関数呼び出しの結果を示すMessageQueueStatus を返します。
この関数は、Qt Quick Ultralite (Platform) 1.9 で導入されました。
enqueueOrDiscard()、discardSupported()、receive()、receiveFromInterrupt()、およびenqueueOrOverwriteFromInterrupt()も参照してください 。
[pure virtual, since 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()も参照してください 。
[virtual, since Qt Quick Ultralite (Platform) 1.9] Qul::Platform::MessageQueueStatus MessageQueueInterface::enqueueOrOverwriteFromInterrupt(const void *message)
message を追加します。キューが満杯の場合は、キューの最後の要素を上書きします。これはenqueueOrOverwrite()と似ていますが、割り込みセーフです。デフォルトの実装では、message を引数としてenqueueOrOverwrite()を呼び出します。
関数呼び出しの結果を示すMessageQueueStatus を返します。
この関数は、Qt Quick Ultralite (Platform) 1.9で導入されました。
enqueueOrOverwrite()、overwriteSupported()、receive()、receiveFromInterrupt()、およびenqueueOrDiscardFromInterrupt()も参照してください 。
[pure virtual, since Qt Quick Ultralite (Platform) 1.9] bool MessageQueueInterface::isEmpty() const
キューが空の場合は `true ` を返し、それ以外の場合は `false ` を返します。
この関数は、Qt Quick Ultralite (Platform) 1.9 で導入されました。
isEmptyFromInterrupt()も参照してください 。
[virtual, since Qt Quick Ultralite (Platform) 1.9] bool MessageQueueInterface::isEmptyFromInterrupt() const
キューが空の場合はtrue を返し、それ以外の場合はfalse を返します。isEmpty()と似ていますが、割り込みセーフです。
この関数は、Qt Quick Ultralite (Platform) 1.9 で導入されました。
isEmpty()も参照してください 。
[pure virtual, since Qt Quick Ultralite (Platform) 1.9] bool MessageQueueInterface::isOverrun() const
キューが、破棄されたアイテムまたは上書きされたアイテムによって容量を超過した場合、true を返します。
この関数は、Qt Quick Ultralite (Platform) 1.9 で導入されました。
clearOverrun()も参照してください 。
[pure virtual, since Qt Quick Ultralite (Platform) 1.9] bool MessageQueueInterface::overwriteSupported() const
上書きがサポートされている場合、true を返します。これは、enqueueOrOverwrite() およびenqueueOrOverwriteFromInterrupt() を使用できることを意味します。
この関数は、Qt Quick Ultralite (Platform) 1.9 で導入されました。
discardSupported()、enqueueOrOverwrite()、およびenqueueOrOverwriteFromInterrupt()も参照してください 。
[pure virtual, since Qt Quick Ultralite (Platform) 1.9] Qul::Platform::MessageQueueStatus MessageQueueInterface::receive(void *message, int32_t timeout = 0)
キューから最初のメッセージを返します。成功した場合、message にはポップされたメッセージが含まれており、MessageQueueStatus::Success でなければなりません。失敗した場合、適切なエラーMessageQueueStatus が、nullポインタとともに返されなければなりません。timeout が指定された場合、この関数はtimeout ミリ秒後に返らなければなりません。 タイムアウト値がゼロの場合は、関数が一切ブロックしないことを意味し、負の値の場合は、関数が無限に待機することを意味します。
この関数は、Qt Quick Ultralite (Platform) 1.9 で導入されました。
receiveFromInterrupt()、enqueueOrDiscard()、enqueueOrDiscardFromInterrupt()、enqueueOrOverwrite()、およびenqueueOrOverwriteFromInterrupt()も参照してください 。
[virtual, since Qt Quick Ultralite (Platform) 1.9] Qul::Platform::MessageQueueStatus MessageQueueInterface::receiveFromInterrupt(void *message, int32_t timeout = 0)
キューから最初のメッセージを返します。receive() と似ていますが、割り込みセーフです。デフォルトの実装では、receive() を呼び出します。message とtimeout は、いずれもreceive() と同様に使用されますが、割り込みからキューを処理する際には timeout を使用してはなりません。
この関数は、Qt Quick Ultralite (Platform) 1.9で導入されました。
receive()、enqueueOrDiscard()、enqueueOrDiscardFromInterrupt()、enqueueOrOverwrite()、およびenqueueOrOverwriteFromInterrupt()も参照してください 。
特定の Qt ライセンスの下で利用可能です。
詳細はこちらをご覧ください。