timer.hpp 789 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #pragma once
  2. #include <chrono>
  3. #include <functional>
  4. #include <sigc++/signal.h>
  5. #include <thread>
  6. #include <atomic>
  7. #include <mutex>
  8. #include <condition_variable>
  9. class Timer {
  10. public:
  11. Timer();
  12. ~Timer();
  13. // Start timer
  14. void start();
  15. // Stop timer
  16. void stop();
  17. // Reset timer
  18. void reset();
  19. // Get elapsed time in milliseconds
  20. int getElapsedTime() const;
  21. // Signal emitted on timer tick
  22. sigc::signal<void(int)> timerSignal;
  23. private:
  24. std::chrono::time_point<std::chrono::steady_clock> m_startTime;
  25. std::atomic<bool> m_running;
  26. // Thread handling
  27. std::thread m_timerThread;
  28. std::mutex m_mutex;
  29. std::condition_variable m_condition;
  30. // Timer thread function
  31. void timerThread();
  32. };