AGVScheduler scheduler; scheduler.assign_task_to_agv(tasks, agvs); for (int i = 0; i < agvs.size(); i++) { moveAgvs(i); },增加函數,直到所有的任務都已經完成
时间: 2024-01-29 14:01:53 浏览: 78
您的问题似乎是一段代码,而不是一个问题。不过我可以看出这是一个AGV调度器,用于将任务分配给AGV并控制它们完成任务。如果您想让所有任务都完成后停止调度器,您可以使用一个while循环,检查任务是否全部完成,然后再退出循环。
示例代码:
```
AGVScheduler scheduler;
scheduler.assign_task_to_agv(tasks, agvs);
bool all_tasks_completed = false;
while (!all_tasks_completed) {
all_tasks_completed = true;
for (int i = 0; i < agvs.size(); i++) {
moveAgvs(i);
if (!agvs[i].isTaskCompleted()) {
all_tasks_completed = false;
}
}
}
```
这段代码将不断循环,直到所有任务都完成并退出循环。
相关问题
AGVScheduler scheduler; scheduler.assign_task_to_agv(tasks, agvs); for (int i = 0; i < agvs.size(); i++) { if (agvs[i].available_ == false) { moveAgvs(i); } },添加代碼,一直在觸發
在上面的代码中加入一个 while 循环,使得程序一直运行,直到所有任务都被分配完成。代码如下所示:
```
AGVScheduler scheduler;
scheduler.assign_task_to_agv(tasks, agvs);
while (!scheduler.all_tasks_assigned()) {
for (int i = 0; i < agvs.size(); i++) {
if (agvs[i].available_ == false) {
moveAgvs(i);
}
}
}
```
其中,all_tasks_assigned() 函数用于判断是否所有任务都已经被分配完成。这样程序就会一直运行,直到所有任务都被分配完成。
//分配小車 AGVScheduler scheduler; scheduler.assign_task_to_agv(tasks, agvs);//開始分配任務 // 遍历所有 AGV,更新位置和状态 for (int i = 0; i < agvs.size(); i++) { if (agvs[i].available_ == 0 && agvs[i].run_== 0 ) { moveAgvs(i); std:: cout << "agv.id:"<< agvs[i].id_ << "___task.id :" << agvs[i].task_id << endl; } },,修改爲,使用多綫程去設置agv運行
可以将原来的遍历所有 AGV 的代码封装在一个函数中,然后使用多线程去调用这个函数。具体实现方法如下:
1. 将分配小车的代码和遍历所有 AGV 的代码分别放在两个函数中。
```c++
void assignAgv(std::vector<Task>& tasks, std::vector<Agv>& agvs) {
AGVScheduler scheduler;
scheduler.assign_task_to_agv(tasks, agvs); // 开始分配任务
}
void updateAgv(std::vector<Agv>& agvs, int i) {
if (agvs[i].available_ == 0 && agvs[i].run_ == 0) {
moveAgvs(i);
std::cout << "agv.id:" << agvs[i].id_ << "___task.id :" << agvs[i].task_id << std::endl;
}
}
```
2. 使用多线程去调用这两个函数,可以使用 C++11 中的 `std::thread` 类,代码如下:
```c++
std::vector<std::thread> threads;
threads.push_back(std::thread(&assignAgv, std::ref(tasks), std::ref(agvs))); // 分配小车
for (int i = 0; i < agvs.size(); i++) {
threads.push_back(std::thread(&updateAgv, std::ref(agvs), i)); // 更新 AGV
}
for (auto& t : threads) {
t.join();
}
```
这段代码会创建一个线程池,首先创建一个线程去调用 `assignAgv` 函数分配小车,然后遍历所有 AGV,为每个 AGV 创建一个线程去调用 `updateAgv` 函数更新 AGV。最后使用 `join` 函数等待所有线程执行完毕。
注意:由于多线程会同时访问 AGV 和 Task 数据,需要对它们进行加锁保护,避免出现不可预测的结果。
阅读全文