Files
RCS-3000/src/dispatch/advanced_dispatcher.h
2026-01-09 15:00:39 +08:00

97 lines
2.7 KiB
C++

#ifndef ADVANCED_DISPATCHER_H
#define ADVANCED_DISPATCHER_H
#include "graph_map.h"
#include "agv_manager_base.h"
#include "resource_manager.h"
#include <thread>
#include <atomic>
#include <chrono>
#include <functional>
/**
* @brief 高级调度器统计信息
*/
struct DispatcherStatistics {
uint64_t total_tasks;
uint64_t completed_tasks;
uint64_t failed_tasks;
uint64_t active_agvs;
DispatcherStatistics()
: total_tasks(0), completed_tasks(0), failed_tasks(0), active_agvs(0) {}
};
/**
* @brief 高级调度器 - 基于图的多AGV任务调度系统
*/
class AdvancedDispatcher {
public:
enum class DispatcherState {
STOPPED, // 停止
RUNNING, // 运行中
PAUSED // 暂停
};
private:
// 核心组件
GraphMap* graph_map_;
ResourceManager* resource_manager_;
AGVManagerBase* agv_manager_;
// 调度器状态
std::atomic<DispatcherState> state_;
std::atomic<bool> should_stop_;
// 调度线程
std::thread dispatch_thread_;
// 调度参数
int dispatch_interval_ms_; // 调度间隔(毫秒)
// 统计信息
DispatcherStatistics statistics_;
// 任务队列(简化实现)
std::vector<std::unique_ptr<Task>> task_queue_;
mutable std::mutex task_mutex_;
// 互斥锁
mutable std::mutex dispatcher_mutex_;
public:
AdvancedDispatcher(GraphMap* map, ResourceManager* resource_manager);
AdvancedDispatcher(GraphMap* map, ResourceManager* resource_manager, AGVManagerBase* agv_manager);
~AdvancedDispatcher();
// ==================== 系统控制 ====================
bool start();
void stop();
void pause();
void resume();
DispatcherState getState() const { return state_.load(); }
// ==================== 任务管理 ====================
bool addTask(int task_id, int start_point_id, int end_point_id,
const std::string& description, int priority = 1);
bool cancelTask(int task_id);
// ==================== 任务执行反馈 ====================
void onTaskStarted(int task_id, int agv_id);
void onTaskCompleted(int task_id, int agv_id, bool success);
// ==================== 配置和监控 ====================
void setDispatchInterval(int interval_ms) { dispatch_interval_ms_ = interval_ms; }
DispatcherStatistics getStatistics();
void printSystemStatus() const;
private:
// ==================== 内部方法 ====================
void dispatchLoop();
void performDispatch();
bool assignTaskToAGV(Task* task, AGV* agv);
void updateStatistics();
};
#endif // ADVANCED_DISPATCHER_H