C++ убивает поток в деструктореC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++ убивает поток в деструкторе

Сообщение Anonymous »

У меня есть класс, который запускает другой поток, который обращается к некоторым его данным через постоянные промежутки времени. Это означает, что у меня есть два потока, которые обращаются к одним и тем же данным (исходный поток и вновь созданный поток). Это приводит к необходимости использования мьютекса. Все идет хорошо, пока не вызывается деструктор класса (в конце программы) и ячейки памяти перестают быть действительными. В этот момент новый поток пытается получить доступ к данным и получает ошибку нарушения прав доступа (очевидно).
Что я хотел бы сделать, так это остановить поток в деструкторе или остановить поток, как только он «заметит», что экземпляр класса был уничтожен.
Вот упрощенный код потока (для краткости используются определения типов):

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»