for (int i = 0; i < agvs.size(); i++) { threads.push_back(std::thread(&MainWindow::moveAgvs, this, i)); },添加代碼:根據每個agv創造的綫程,各自帶入moveAgvs(i),再代入draw_agv_path(i)
时间: 2024-03-05 07:54:36 浏览: 60
你可以根据每个agv创建的线程,分别调用draw_agv_path(i)函数来绘制机器人的路径。修改后的代码如下:
```
for (int i = 0; i < agvs.size(); i++) {
threads.push_back(std::thread([=](){
moveAgvs(i);
draw_agv_path(i);
}));
}
```
这里使用了lambda表达式来创建线程,保证了每个线程中的i值不会被修改。在每个线程中,先调用moveAgvs(i)函数移动机器人,然后调用draw_agv_path(i)函数绘制机器人路径。
需要注意的是,如果draw_agv_path(i)函数中访问了UI控件或者其他线程不安全的对象,需要使用Qt的信号和槽机制来实现跨线程调用。
相关问题
std::vector<std::thread> threads; threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::ref(tasks), std::ref(agvs))); // 分配小车 for (int i = 0; i < agvs.size(); i++) { threads.push_back(std::thread(&moveAgvs, i)); // 更新 AGV } for (auto& t : threads) { t.join(); }
这段代码也是使用 C++11 中的多线程库 `std::thread` 进行并行编程。首先定义了一个 `std::vector<std::thread>` 类型的变量 `threads`,用于存储线程。接下来的代码创建了一个新的线程,执行函数是 `AGVScheduler::assign_task_to_agv`,传入的参数是 `tasks` 和 `agvs`。这个函数的作用是将任务分配给 AGV。然后,使用 `for` 循环创建了 `agvs.size()` 个新的线程,执行函数是 `moveAgvs`,参数是 `i`。最后一个 `for` 循环等待所有线程运行完毕,调用 `join()` 函数阻塞当前线程,直到线程结束。和之前的代码相比,这段代码的区别在于将任务分配给 AGV 的函数 `AGVScheduler::assign_task_to_agv` 放在了新的线程中运行,而不是在主线程中运行。这样可以更好地利用多核 CPU 的性能,提高程序的效率。
void MainWindow::action_agv() { std::vector<std::thread> threads; threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::ref(tasks), std::ref(agvs))); // 分配小车 for (int i = 0; i < agvs.size(); i++) { threads.push_back(std::thread(& MainWindow::moveAgvs, i)); // 更新 AGV } for (auto& t : threads) { t.join(); ,報錯:no matching function for call to “std:: thread :: _ lnvoker<std::tuple<std::tuple<void
这个错误通常是由于参数类型不匹配导致的。在这段代码中,错误可能是由于 `MainWindow::moveAgvs` 函数的参数类型与 `std::thread` 构造函数所需的参数类型不匹配。
请检查 `MainWindow::moveAgvs` 函数的定义和声明,确保其参数类型与所需的参数类型一致。如果参数类型正确,请检查代码中是否存在其他语法错误或类型不匹配的情况。
阅读全文
相关推荐
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)