diff options
| author | untodesu <kirill@untode.su> | 2025-03-15 16:22:09 +0500 |
|---|---|---|
| committer | untodesu <kirill@untode.su> | 2025-03-15 16:22:09 +0500 |
| commit | 3bf42c6ff3805a0d42bbc661794a95ff31bedc26 (patch) | |
| tree | 05049955847504808d6bed2bb7b155f8b03807bb /game/shared/threading.hh | |
| parent | 02294547dcde0d4ad76e229106702261e9f10a51 (diff) | |
| download | voxelius-3bf42c6ff3805a0d42bbc661794a95ff31bedc26.tar.bz2 voxelius-3bf42c6ff3805a0d42bbc661794a95ff31bedc26.zip | |
Add whatever I was working on for the last month
Diffstat (limited to 'game/shared/threading.hh')
| -rw-r--r-- | game/shared/threading.hh | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/game/shared/threading.hh b/game/shared/threading.hh new file mode 100644 index 0000000..e143f4f --- /dev/null +++ b/game/shared/threading.hh @@ -0,0 +1,46 @@ +#ifndef SHARED_THREADING_HH +#define SHARED_THREADING_HH 1 +#pragma once + +enum class task_status : unsigned int { + ENQUEUED = 0x0000U, + PROCESSING = 0x0001U, + COMPLETED = 0x0002U, + CANCELLED = 0x0004U, +}; + +class Task { +public: + virtual ~Task(void) = default; + virtual void process(void) = 0; + virtual void finalize(void) = 0; + + task_status get_status(void) const; + void set_status(task_status status); + +protected: + std::atomic<task_status> m_status; + std::future<void> m_future; +}; + +namespace threading +{ +void init(void); +void deinit(void); +void update(void); +void submit(Task *task); +} // namespace threading + +namespace threading +{ +template<typename T, typename... AT> +void submit(AT &&... args); +} // namespace threading + +template<typename T, typename... AT> +inline void threading::submit(AT &&... args) +{ + threading::submit(new T(args...)); +} + +#endif /* SHARED_THREADING_HH */ |
