for (int i = 0; i < agvs.size(); i++) { threads.push_back(std::thread(&MainWindow::moveAgvs, this, i)); } for (auto& t : threads) { t.join(); },改爲用Qheard
时间: 2024-03-06 13:48:27 浏览: 63
agvs仓储机器人检测数据集VOC+YOLO格式967张3类别.7z
使用QThread来代替std::thread,您可以将上面的代码修改为:
```cpp
for (int i = 0; i < agvs.size(); i++) {
AgvThread* agvThread = new AgvThread();
agvThread->moveAgvs(this, i); // 将moveAgvs函数的逻辑放在run函数中
agvThreads.push_back(agvThread);
}
for (auto& thread : agvThreads) {
thread->start();
}
for (auto& thread : agvThreads) {
thread->wait();
}
```
其中,AgvThread是您自己定义的一个类,继承自QThread。在AgvThread类中,您需要实现run()函数,来执行AGV的运输逻辑。
在上面的代码中,我们首先创建了一组AgvThread对象,然后将MainWindow的指针和i作为参数传递给AgvThread的moveAgvs函数。这个函数中,将MainWindow的指针和i存储在AgvThread对象中,然后在run函数中使用这些参数。
接下来,我们使用start()函数来启动每个AgvThread对象,并使用wait()函数来等待所有线程执行完毕。
需要注意的是,在使用QThread时,您需要手动管理线程对象的内存,即在程序结束时需要删除所有的AgvThread对象。您可以在MainWindow的析构函数中,删除所有的AgvThread对象,例如:
```cpp
MainWindow::~MainWindow() {
for (auto& thread : agvThreads) {
delete thread;
}
}
```
阅读全文