97 lines
2.7 KiB
C++
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
|