Я пытаюсь запустить функцию-член в своем собственном потоке и следовал this post, однако в этом примере поток запускается и заканчивается в той же функции. Как вы поддерживаете ссылку на поток для присоединения к отдельной функции-члену (скажем, деструктор)? Я попытался это:Запуск функции-члена в отдельном потоке
class foo
{
foo();
~foo();
volatile sig_atomic_t m_run_thread = true;
std::thread &m_read_thread;
void read_thread();
}
foo::foo():m_read_thread(std::thread(&foo::read_thread, this))
{
}
foo::~foo()
{
m_run_thread = false;
m_read_thread.join();
}
void foo::read_thread()
{
while(m_run_thread)
{
//do something cool
}
}
int main()
{
foo bar;
//do other stuff
}
Компилятор дает мне ошибку, хотя: ошибка: недопустимую инициализации неконстантного ссылки типа «станд :: нить &» от RValue типа "станд :: нить. Это вызвано тем, что я пытаюсь привязать временную ссылку. Что это лучший способ исправить это?
Если она компилировать ваш 'm_read_thread' будет оборванная ссылкой после' Foo' построен. Почему у вас есть 'thread &' member вместо 'thread'? – Praetorian
Не указывайте ссылку 'm_read_thread'. –
Это не проблема, но 'volatile sig_atomic_t' является жестоким старым C для координации между основной программой и обработчиком сигналов. Вместо этого используйте 'std :: atomic'. –