Здравствуйте, недавно пришлось заняться разработкой многопоточного приложения (впервые) и наткнулся на такую проблему: позарез нужно создать поток для конкретного объекта с передачей в конструктор имени нестатической функции, гугл ничего путного не дал.
Подскажите, это вообще возможно?
Если нет, то как это 'лечиться'?
В абстракции: есть класс System, у него есть нестатический метод private update() который я должен отслеживать, путем инициализации указателя private thread* Thread в конструкторе класса.
P.S в update вызывается метод move(...), который привязан к объекту, т.е я не могу сделать update статическим без создания контейнера, хранящего все данные о пользователях, а это затратно
#include
System() {
Thread = new thread(update);//ошибка! отсутствуют экземпляры констуктора соответствующий ... для std::thread::thread (void())
}
void update() {
//...
move(...);
//...
}
void move() {
//работает с полями объекта
}
};
{
//где-то создается System* system = System;
}
P.S(2) Перелез с c#, там можно инициализировать потоки нестатическими методами(вроде), не судите строго
Ответ
В документации говорится, что конструктор выглядит так:
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
поэтому могу предположить, что следует использовать лямбда-функцию как-то так:
new thread([&]() { this.update(); })
В любом случае следует быть осторожным со временем жизни объектов.
Комментариев нет:
Отправить комментарий