Thread.hpp 1014 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifndef CORE_THREAD_HPP
  2. #define CORE_THREAD_HPP
  3. #include <mutex>
  4. #include <thread>
  5. namespace Core {
  6. class Mutex final {
  7. std::mutex mutex{};
  8. public:
  9. void lock() noexcept;
  10. void unlock() noexcept;
  11. };
  12. class MutexGuard {
  13. Mutex& mutex;
  14. public:
  15. MutexGuard(Mutex& m);
  16. MutexGuard(const MutexGuard&) = delete;
  17. MutexGuard(MutexGuard&&) = delete;
  18. ~MutexGuard();
  19. MutexGuard& operator=(const MutexGuard&) = delete;
  20. MutexGuard& operator=(MutexGuard&&) = delete;
  21. };
  22. class Thread final {
  23. std::thread thread;
  24. public:
  25. using Function = void (*)(void*);
  26. Thread();
  27. Thread(const Thread& other) = delete;
  28. Thread(Thread&& other) noexcept;
  29. ~Thread();
  30. Thread& operator=(const Thread& other) = delete;
  31. Thread& operator=(Thread&& other) noexcept;
  32. void swap(Thread& other);
  33. bool start(Function f, void* p);
  34. bool join();
  35. };
  36. }
  37. #endif