このページでは

C

Qul::Platform::MessageQueueInterface Class

class Qul::Platform::MessageQueueInterface

Qt 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 用のキューを実装する。これは、Qt Quick Ultraliteが提供するデフォルトの実装よりも優先される、独自のキュー実装(またはOSが提供するもの)を持っている場合に便利です。

デフォルトでは、enqueueOrDiscardFromInterrupt()、enqueueOrOverwriteFromInterrupt()、receiveFromInterrupt() は、それぞれの非割り込みバージョンを呼び出している。基本的なキュー機能が割り込みセーフであるか、割り込みセーフを保証するための対策が講じられていない限り、これらはオーバーライドされなければならない。

破棄および/または上書きのサポートは、discardSupported() およびoverwriteSupported() 関数から真偽値を返すことで通知される。

注意: EventQueue が期待通りに機能するためには、これらの操作の 1 つまたは両方がサポートされていなければなりません。

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() と似ているが、割り込みセーフである。デフォルトの実装では、messageenqueueOrDiscard() を呼び出す。

関数呼び出しの結果を示す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() と似ているが、割り込みセーフである。デフォルトの実装では、messageenqueueOrOverwrite() を呼び出す。

関数呼び出しの結果を示す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 を含んでいなければならない。失敗した場合、NULLポインタとともに、適切なエラーMessageQueueStatus が返されなければならない。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() を呼び出す。messagetimeout の両方がreceive() のように使用されますが、割り込みからキューを処理するときには timeout を使用してはなりません。

この関数はQt Quick Ultralite (Platform) 1.9 で導入された。

receive(),enqueueOrDiscard(),enqueueOrDiscardFromInterrupt(),enqueueOrOverwrite(),enqueueOrOverwriteFromInterrupt()も参照してください

特定の Qt ライセンスの下で利用可能です。
詳細をご覧ください。