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-2024 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