AUI Framework  develop
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
AFunctionQueue.h
    1/*
    2 * AUI Framework - Declarative UI toolkit for modern C++20
    3 * Copyright (C) 2020-2025 Alex2772 and Contributors
    4 *
    5 * SPDX-License-Identifier: MPL-2.0
    6 *
    7 * This Source Code Form is subject to the terms of the Mozilla Public
    8 * License, v. 2.0. If a copy of the MPL was not distributed with this
    9 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
   10 */
   11
   12#pragma once
   13
   14#include <AUI/Thread/AMutex.h>
   15#include <AUI/Common/AQueue.h>
   16
   22public:
   23
   24
   25    void operator<<(std::function<void()> function) {
   26        std::unique_lock lock(mLock);
   27        mQueue << std::move(function);
   28    }
   29
   30    void process() {
   31        std::unique_lock l(mLock);
   32        while (!mQueue.empty()) {
   33            auto f = std::move(mQueue.front());
   34            mQueue.pop();
   35            l.unlock();
   36            f();
   37            l.lock();
   38        }
   39    }
   40
   41    [[nodiscard]]
   42    bool empty() noexcept {
   43        std::unique_lock l(mLock);
   44        return mQueue.empty();
   45    }
   46
   47private:
   48    AMutex mLock;
   49    AQueue<std::function<void()>> mQueue;
   50};
Thread-safe implementation of function queue.
Definition AFunctionQueue.h:21
A std::queue with AUI extensions.
Definition AQueue.h:24
Basic syscall-based synchronization primitive.
Definition AMutex.h:33