void agv_charge(int i);void moveAgvs(int i);,if (agvs[i].battery_ <100){ std::thread charge_thread(& { agv_charge(i); }); charge_thread.detach(); },增加代碼:黨綫程結束的時候,運行moveAgvs(i);
时间: 2024-02-27 13:56:13 浏览: 75
AGVS.rar_AGVS调度_gulf5j4_scheduling AGV_wpf agv调度系统_调度控制
5星 · 资源好评率100%
如果你想在新线程结束时运行 `moveAgvs(i)`,可以将代码修改为:
```
if (agvs[i].battery_ < 100) {
auto i_copy = std::move(agvs[i]);
std::thread charge_thread([i_copy]() {
agv_charge(i_copy);
// 在线程结束时运行moveAgvs(i)
moveAgvs(i_copy);
});
charge_thread.detach();
}
```
这里先将 `agvs[i]` 移动到一个新的变量 `i_copy` 中,然后在新线程中使用 `i_copy`,确保在线程中可以访问到它。在线程结束时,先运行 `moveAgvs(i_copy)`,然后再运行 `move(std::move(i_copy))`,将 `i_copy` 移动到别处。
需要注意,这里的 `agv_charge` 和 `moveAgvs` 函数都是在主线程中定义的,因此需要保证它们在新线程中也可以访问到正确的变量。如果需要访问其他的变量,也需要考虑如何正确地传递参数。
阅读全文