Предполагая, что processor::execute
является статической функцией-членом без аргументов, вы передаете ей дополнительный аргумент, поэтому реализация std::thread
не может найти перегрузку с правильными аргументами.Правильный вызов:
threads.push_back(thread(&processor::execute));
или более просто:
threads.emplace_back(&processor::execute);
Если это не статический метод, вам нужно передать экземпляр класса вашего процессора, например:
processor p;
for (int i = 0; i <= 5; i++)
{
threads.emplace_back(&processor::execute, &p);
}
Судя по печати "Synchronizing all threads"
Я думаю, вы не понимаете, что делает std::thread::detach
, он отсоединяет поток от экземпляра std::thread
, чтобы он мог продолжить работу после разрушения структуры.Я предполагаю, что вы на самом деле хотели вызвать std::thread::join
, который ожидает завершения выполнения потока.std::thread::detach
редко бывает правильным.