- Статус
- Оффлайн
- Регистрация
- 8 Дек 2018
- Сообщения
- 133
- Реакции
- 63
Столкнулся с проблемой: после создания дополнительного потока, без ожидания его завершения функцией thread.detach(), не получается изменить значения членов класса из основного потока. Если использовать thread.join(), то такой проблемы нет, но мне не нужно ждать завершения доп. потока, а доступ нужен из главного потока.
Собственно данный код это иллюстрирует, bVar внутри checkVar() всегда false, хотя из main() я присваиваю ей true;
Собственно данный код это иллюстрирует, bVar внутри checkVar() всегда false, хотя из main() я присваиваю ей true;
Код:
#include <iostream>
#include <thread>
#include <windows.h>
using namespace std;
class Foo
{
public:
bool bVar = false;
void checkVar()
{
while (true)
{
cout << "checkVar: " << bVar << endl;
Sleep(1000);
}
}
};
int main()
{
Foo bar;
thread thr1(&Foo::checkVar, bar);
thr1.detach();
while (true)
{
bar.bVar = true;
cout << "setted bVar to: " << bar.bVar << endl;
Sleep(1000);
}
return 0;
}