for (int i = 0; i < agvs.size(); i++) { moveAgvs(i); },添加代碼,如果agvs的available值是1,則moveagvs(I)
时间: 2024-02-06 22:03:14 浏览: 56
可以在原代码的基础上加一个判断语句,判断 agvs[i] 的 available 值是否为1,如果是就执行 moveAgvs(i) 函数。代码如下所示:
```
for (int i = 0; i < agvs.size(); i++) {
if (agvs[i].available == 1) {
moveAgvs(i);
}
}
```
这样就可以只移动可用的 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; } },將他變爲定時觸發
如果你想将这段代码变为定时触发,可以使用 QTimer 类在指定的时间间隔内触发一个信号,并在该信号的槽函数中执行这段代码。
首先,你需要创建一个 QTimer 对象,并设置定时器的时间间隔:
```
QTimer* timer = new QTimer(this);
timer->setInterval(1000); // 定时器间隔为 1 秒
```
接下来,你需要将 QTimer 对象的 timeout() 信号连接到一个槽函数,该槽函数将执行你需要定时触发的代码:
```
connect(timer, &QTimer::timeout, this, [=]() {
// 遍历所有 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;
}
}
});
```
最后,你需要启动 QTimer 对象来开始定时触发:
```
timer->start();
```
这样就可以在每个 1 秒钟内触发一次定时器,并执行你指定的代码。需要注意的是,如果你的程序需要在多线程中运行,请确保在正确的线程中创建和使用 QTimer 对象。
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() 函数用于判断是否所有任务都已经被分配完成。这样程序就会一直运行,直到所有任务都被分配完成。
阅读全文