CyclicTaskExecutor.h 845 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #pragma once
  2. #include <iostream>
  3. #include <thread>
  4. #include <mutex>
  5. #include <condition_variable>
  6. #include <vector>
  7. #include <functional>
  8. #include <atomic>
  9. #include <stdexcept>
  10. #include <cstddef>
  11. #include "Aclapi.h"
  12. #include "dt.h"
  13. class __declspec(dllexport) CyclicTaskExecutor
  14. {
  15. private:
  16. static CyclicTaskExecutor* m_pTaskExecutor;
  17. static std::mutex m_Mutex;
  18. std::atomic<bool> running_{ true };
  19. std::thread worker_;
  20. std::vector<std::function<void()>> tasks_; // 任务列表
  21. mutable std::mutex mutex_;
  22. std::condition_variable taskAdded_;
  23. size_t currentTaskIndex_{ 0 };
  24. public:
  25. static CyclicTaskExecutor* GetInstance();
  26. CyclicTaskExecutor();
  27. ~CyclicTaskExecutor();
  28. void AddTask(std::function<void()> task);
  29. // 获取当前任务数量
  30. size_t TaskCount();
  31. // 清空所有任务
  32. void ClearTasks();
  33. };