| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // 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<bool> running_{false};
- std::thread thread_;
- };
- } // namespace commkit
|