// EventLoop.h - 用户态事件循环 // 职责:独立工作线程,循环从驱动批量读取事件 → 调用 TOnData 回调 #pragma once #include "pch.h" #include "../common/CommKitIoctl.h" namespace commkit { // TOnData 类型定义,与 DllWrapper.h 中的 TOnData 一致 // LONG CALLBACK = LONG __stdcall typedef LONG(CALLBACK* TOnData)(int Sequence, double dTime, DWORD ComNumber, DWORD Irp, DWORD dwSize, char* lpData); class EventLoop { public: EventLoop(); ~EventLoop(); EventLoop(const EventLoop&) = delete; EventLoop& operator=(const EventLoop&) = delete; // 启动事件循环(绑定驱动句柄与回调) bool Start(HANDLE driver_handle, TOnData callback); // 停止事件循环并等待线程退出 void Stop(); // 是否在运行 bool IsRunning() const { return running_.load(); } private: // 工作线程主循环 void Run(); HANDLE driver_handle_ = INVALID_HANDLE_VALUE; TOnData callback_ = nullptr; std::atomic running_{false}; std::thread thread_; }; } // namespace commkit