for (int i = 0; i < agvs.size(); i++) { moveAgvs(i); },修改代碼為:黨agv對應的task的completed都不爲2時,觸發此函數
时间: 2024-01-29 13:02:42 浏览: 59
您可以将原来的代码改为以下形式来实现您的要求:
```
for (int i = 0; i < agvs.size(); i++) {
if (agvs[i].getCurrentTask().getCompleted() != 2) {
moveAgvs(i);
}
}
```
这样会先判断当前 AGV 对应的 task 的 completed 是否为 2,如果不是就触发 moveAgvs() 函数。
相关问题
// 遍历所有 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. 定义一个函数 `updateAgv(int i)`,将原来遍历所有 AGV 的代码放在这个函数中,并将 i 作为参数传入。
2. 使用多线程去调用这个函数,可以使用 C++11 中的 `std::thread` 类,代码如下:
```c++
std::vector<std::thread> threads;
for (int i = 0; i < agvs.size(); i++) {
if (agvs[i].available_ == 0 && agvs[i].run_ == 0) {
threads.push_back(std::thread(&updateAgv, i));
}
}
for (auto& t : threads) {
t.join();
}
```
这段代码会创建一个线程池,遍历所有 AGV,如果 AGV 可用并且没有在运行任务,就将 `updateAgv` 函数和 i 作为参数传入 `std::thread` 类的构造函数,创建一个线程。最后使用 `join` 函数等待所有线程执行完毕。
注意:由于多线程会同时访问 AGV 数据,需要对 AGV 进行加锁保护,避免出现不可预测的结果。
for (int i = 0; i < agvs.size(); i++) { moveAgvs(i); },添加代碼,如果agvs的available值是1,則moveagvs(I)
可以在原代码的基础上加一个判断语句,判断 agvs[i] 的 available 值是否为1,如果是就执行 moveAgvs(i) 函数。代码如下所示:
```
for (int i = 0; i < agvs.size(); i++) {
if (agvs[i].available == 1) {
moveAgvs(i);
}
}
```
这样就可以只移动可用的 agvs 了。
阅读全文