if (agvs[i].battery_ <100){ std::thread charge_thread([&]() { agv_charge(i); }); charge_thread.detach(); },黨新綫程結束的時候,去觸發moveAgvs(i)
时间: 2024-02-14 09:06:30 浏览: 74
反光式AGV示例-AGV及AGVS的开发与应用
如果想要在新线程结束时触发`moveAgvs(i)`函数,可以使用`std::thread::join`函数等待线程结束,然后在等待结束后执行`moveAgvs(i)`函数,如下所示:
```c++
if (agvs[i].battery_ < 100){
std::thread charge_thread([&]() {
agv_charge(i);
});
charge_thread.join(); // 等待线程结束
moveAgvs(i); // 在线程结束后执行 moveAgvs(i) 函数
}
```
这样修改后,当`agvs[i]`的电量小于100时,会创建一个新线程并在其中运行`agv_charge(i)`函数,等待线程结束后会执行`moveAgvs(i)`函数,即先充电再移动AGV。
需要注意的是,使用`join`函数等待线程结束时,线程必须是可加入(joinable)状态,因此不能使用`detach`将线程分离。
阅读全文