mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41:51 +00:00
29 lines
658 B
C++
29 lines
658 B
C++
#pragma once
|
|
|
|
#include <queue>
|
|
#include <mutex>
|
|
#include "delegates.hpp"
|
|
|
|
class PostRunnables {
|
|
std::queue<runnable> runnables;
|
|
std::recursive_mutex mutex;
|
|
public:
|
|
void postRunnable(runnable task) {
|
|
std::lock_guard<std::recursive_mutex> lock(mutex);
|
|
runnables.push(std::move(task));
|
|
}
|
|
|
|
void run() {
|
|
std::queue<runnable> tasksToRun;
|
|
{
|
|
std::lock_guard<std::recursive_mutex> lock(mutex);
|
|
std::swap(tasksToRun, runnables);
|
|
}
|
|
|
|
while (!tasksToRun.empty()) {
|
|
auto& task = tasksToRun.front();
|
|
task();
|
|
tasksToRun.pop();
|
|
}
|
|
}
|
|
};
|