eis/eqpalg/utility/async_db_worker.h

45 lines
1.1 KiB
C
Raw Permalink Normal View History

#pragma once
/**
* @file async_db_worker.h
* @brief 线 DB2 mon 20ms
*
* rule_id submit
* 退 drain_and_stop()
*
* @author your name (you@domain.com)
* @version 0.1
* @date 2026-05-13
*/
#include <atomic>
#include <condition_variable>
#include <functional>
#include <memory>
#include <mutex>
#include <string>
#include <thread>
#include <unordered_map>
class AsyncDbWorker {
public:
static AsyncDbWorker &instance();
/// 提交任务;同 rule_id 覆盖旧任务(去重)
void submit(const std::string &rule_id, std::function<void()> task);
/// 排空队列并停止线程(进程退出前调用)
void drain_and_stop();
private:
AsyncDbWorker();
~AsyncDbWorker();
std::unique_ptr<std::thread> worker_;
std::mutex mtx_;
std::condition_variable cv_;
std::unordered_map<std::string, std::function<void()>> pending_;
std::atomic<bool> running_{true};
void loop();
};