timer.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include "sol/sol.hpp"
  3. #include "core/structs.h"
  4. #include "util/thread.h"
  5. #include "util/queue.hpp"
  6. #include "module/basemodule.h"
  7. #include <map>
  8. #include <mutex>
  9. namespace module
  10. {
  11. struct timer_info {
  12. std::string filepath;
  13. std::string name;
  14. std::string funname;
  15. bool loop = false;
  16. timestamp exec_msec = 0;
  17. timestamp msec = 0;
  18. luastate* lua = nullptr;
  19. sol::function function;
  20. };
  21. /// <summary>
  22. /// 定时器
  23. /// </summary>
  24. class timer:private ylib::ithread,public module::base {
  25. public:
  26. timer();
  27. ~timer();
  28. /// <summary>
  29. /// 增加
  30. /// </summary>
  31. /// <param name="name"></param>
  32. /// <param name="filepath"></param>
  33. /// <param name="funname"></param>
  34. /// <param name="msec"></param>
  35. /// <param name="loop"></param>
  36. /// <returns></returns>
  37. std::string add(const std::string& name,const std::string& filepath,const std::string& funname,int msec,bool loop, sol::this_state ts);
  38. /// <summary>
  39. /// 移除
  40. /// </summary>
  41. /// <param name="name"></param>
  42. void remove(const std::string& name, sol::this_state ts);
  43. static void regist(sol::state* lua);
  44. virtual void regist_global(const std::string& name, sol::state* lua) override;
  45. virtual void delete_global() { delete this; }
  46. private:
  47. virtual bool run();
  48. public:
  49. fastweb::app* m_app = nullptr;
  50. std::map<std::string,timer_info> m_list;
  51. ylib::queue<std::string> m_removed;
  52. std::mutex m_mutex;
  53. bool m_insert = false;
  54. };
  55. }