У меня есть класс, который запускает другой поток, который обращается к некоторым его данным через постоянные промежутки времени. Это означает, что у меня есть два потока, которые обращаются к одним и тем же данным (исходный поток и вновь созданный поток). Это приводит к необходимости использования мьютекса. Все идет хорошо, пока не вызывается деструктор класса (в конце программы) и ячейки памяти перестают быть действительными. В этот момент новый поток пытается получить доступ к данным и получает ошибку нарушения прав доступа (очевидно).
Что я хотел бы сделать, так это остановить поток в деструкторе или остановить поток, как только он «заметит», что экземпляр класса был уничтожен.
Вот упрощенный код потока (для краткости используются определения типов):
Код: Выделить всё
void myClass::StartThread() {
auto threadFunc = [&, this]() {
while (true) {
time_point now = steady_clock::now();
if (chro::duration_cast(now - this->m_lastSeedTime).count() > INTERVAL) {
std::lock_guard lockGuard(this->m_mut);
this->m_lastSeedTime = now;
this->accessData();
}
}
};
std::thread thread(threadFunc);
thread.detach();
конечно, если я просто неправильно обращаюсь с этим каким-то очевидным образом, пожалуйста, дайте мне знать.
Подробнее здесь:
https://stackoverflow.com/questions/654 ... destructor