C++: не работает простейшая программа с использованием многопоточности (std::thread)
Задание: На маршруте несколько остановок. На одной остановке может останавливаться несколько автобусов одновременно, но не более заданного числа. Необходимо с помощью многопоточности реализовать работу автобусов.
Я написал код, однако в процессе компиляции возникают две ошибки:
Ошибка C2893 Сбой при специализации функции-шаблона "unknown-type std::invoke(_Callable &&) noexcept(<expr>)".
Ошибка C2672 "invoke": не найдена соответствующая перегруженная функция
Код:
#include <iostream>
#include <stdlib.h>
#include <thread>
#include <Windows.h>
using namespace std;
class Bus {
private:
int currentStop;
int number;
public:
Bus() {
this->currentStop = this->number = 0;
}
int run(int stops) {
cout << "\nТекущая остановка автобуса №" << this->number << ": " << this->currentStop;
Sleep(300);
this->currentStop = rand() % (stops - this->currentStop) + this->currentStop;
return currentStop;
}
int getCurrentStop() {
return currentStop;
}
void setCurrentStop(int currentStop) {
this->currentStop = currentStop;
}
int getNumber() {
return number;
}
void setNumber(int number) {
this->number = number;
}
~Bus() {
}
};
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int amountOfStops, amountOfBuses, buses;
cout << "Введите количество остановок: ";
cin >> amountOfStops;
cout << "Введите количество автобусов: ";
cin >> buses;
cout << "\nВведите количество автобусов на одной остановке: ";
cin >> amountOfBuses;
Bus* massiv = new Bus[buses];
for (int i = 0; i < buses; i++) {
thread th(massiv[i].run(amountOfStops));
}
return 0;
}
Что он должен делать? Создаётся массив объектов Bus, в котором у каждого элемента в потоке должен выполняться метод run(). Этот метод просто возвращает рандомный номер "текущей" остановки для данного автобуса, причём такой, что он всегда больше предыдущего номера этого автобуса.
Почему этот код не работает?