void MainWindow::moveAgvs(int i),void MainWindow::action_agv() { std::vectorstd::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...怎麽修改
时间: 2024-01-20 19:03:00 浏览: 26
在这段代码中,报错的原因可能是 `std::thread` 构造函数中的参数类型不正确。在 `std::thread` 构造函数中,第一个参数应该是需要在新线程中运行的函数指针,第二个参数是该函数需要的参数。因此,正确的写法应该是:
```
threads.push_back(std::thread(&MainWindow::moveAgvs, this, i));
```
这样就可以将 `MainWindow` 对象和 `i` 作为参数传递给 `MainWindow::moveAgvs` 函数,并在新的线程中运行该函数。注意,这里使用了 `this` 来显式传递 `MainWindow` 对象的指针。
相关问题
void MainWindow::moveAgvs(int i),怎麽修改 threads.push_back(std::thread(&moveAgvs, std::ref(agvs), i));
如果您想修改这段代码以实现您的需求,可以考虑以下几个方面:
1.修改"moveAgvs"函数的实现来满足您的需求,可以添加、删除或修改函数的参数和实现。
2.修改"threads.push_back"语句,以确保您的修改不会对其他部分产生影响。您可以根据需要添加、删除或修改传递给函数的参数。
例如,如果您想修改"moveAgvs"函数的实现,可以在函数中添加一些逻辑来控制AGV的移动方向、速度、目标等。如果您想修改线程的实现方式,可以使用不同的线程库或语言来实现。以下是一些可能的修改示例:
1.修改"moveAgvs"函数的实现,在移动AGV之前打印一些调试信息。
```c++
void MainWindow::moveAgvs(int i) {
// 打印调试信息
std::cout << "moving AGV " << i << std::endl;
// 移动AGV
// ...
}
```
2.修改"threads.push_back"语句,添加一个新的参数来控制线程的优先级。
```c++
threads.push_back(std::thread(std::bind(&MainWindow::moveAgvs, this, i), std::ref(agvs), i, std::chrono::milliseconds(100), std::thread::priority::high));
```
3.使用不同的线程库或语言来实现线程。
```python
import threading
def moveAgvs(i):
# 移动AGV
# ...
# 创建线程
t = threading.Thread(target=moveAgvs, args=(i,))
# 启动线程
t.start()
```
void MainWindow::moveAgvs(int i),怎麽修改代碼: threads.push_back(std::thread(&moveAgvs, std::ref(agvs), i));
如果您想修改这段代码以实现您的需求,可以考虑以下几个方面:
1. 修改"moveAgvs"函数的实现来满足您的需求,可以添加、删除或修改函数的参数和实现。
2. 修改"threads.push_back"语句,以确保您的修改不会对其他部分产生影响。您可以根据需要添加、删除或修改传递给函数的参数。
以下是一些可能的修改示例:
1. 修改"moveAgvs"函数的实现,添加一些逻辑,如控制AGV的移动速度、方向等。
```c++
void MainWindow::moveAgvs(int i) {
// 移动AGV
// ...
// 控制AGV的移动速度
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
```
2. 修改"threads.push_back"语句,添加一个新的参数,如线程名称。
```c++
threads.push_back(std::thread(&moveAgvs, std::ref(agvs), i, "AGV-" + std::to_string(i)));
```
3. 使用Lambda表达式替代函数指针,以简化代码。
```c++
threads.push_back(std::thread([this, i]() {
// 移动AGV
// ...
}));
```
无论您选择哪种修改方式,都需要确保修改后的代码能够正确地实现您的需求,并且不会对其他部分产生影响。