#ifndef ADVANCED_DISPATCHER_H #define ADVANCED_DISPATCHER_H #include "graph_map.h" #include "agv_manager_base.h" #include "resource_manager.h" #include #include #include #include /** * @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 state_; std::atomic should_stop_; // 调度线程 std::thread dispatch_thread_; // 调度参数 int dispatch_interval_ms_; // 调度间隔(毫秒) // 统计信息 DispatcherStatistics statistics_; // 任务队列(简化实现) std::vector> 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