EventLoop.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // EventLoop.h - 用户态事件循环
  2. // 职责:独立工作线程,循环从驱动批量读取事件 → 调用 TOnData 回调
  3. #pragma once
  4. #include "pch.h"
  5. #include "../common/CommKitIoctl.h"
  6. namespace commkit {
  7. // TOnData 类型定义,与 DllWrapper.h 中的 TOnData 一致
  8. // LONG CALLBACK = LONG __stdcall
  9. typedef LONG(CALLBACK* TOnData)(int Sequence, double dTime,
  10. DWORD ComNumber, DWORD Irp,
  11. DWORD dwSize, char* lpData);
  12. class EventLoop {
  13. public:
  14. EventLoop();
  15. ~EventLoop();
  16. EventLoop(const EventLoop&) = delete;
  17. EventLoop& operator=(const EventLoop&) = delete;
  18. // 启动事件循环(绑定驱动句柄与回调)
  19. bool Start(HANDLE driver_handle, TOnData callback);
  20. // 停止事件循环并等待线程退出
  21. void Stop();
  22. // 是否在运行
  23. bool IsRunning() const { return running_.load(); }
  24. private:
  25. // 工作线程主循环
  26. void Run();
  27. HANDLE driver_handle_ = INVALID_HANDLE_VALUE;
  28. TOnData callback_ = nullptr;
  29. std::atomic<bool> running_{false};
  30. std::thread thread_;
  31. };
  32. } // namespace commkit