Я новичок в C++ 11 резьбы, и я пытаюсь сделать что-то выглядит следующим образом:Запустите поток демона, который является частным методом класса?
class Something {
public:
void start() {
this->task_ = std::thread(&Something::someTask, this);
this->isRunning_ = true;
this->task_.detach(); // I read detach will stop it from hanging
}
void stop() {
this->isRunning = false;
}
~Something() {
this->stop();
}
private:
std::atomic<bool> isRunning_;
std::thread task_;
void someTask()
{
while(this->isRunning_) {
// do something forever
}
}
};
Something whatever;
whatever.start();
Однако, поток продолжает получать заблокирован. Как ничто после whatever.start()
выполняет. Он просто зависает во время цикла.
Поместите эту строку 'this-> isRunning_ = true; 'above' this-> task_ = std :: thread (& Something :: someTask, this); '. В противном случае цикл потока может завершиться до того, как вы установите условие для его запуска. –
@ πάνταῥεῖ Спасибо. По какой-то причине петля теперь исчезает мгновенно. – oldjohn1994
Просто проголосовали, чтобы закрыть это. Очевидная причина, по которой она не соответствует теме, заключается в том, что ей не хватает полного, но минимального кода для воспроизведения проблемы. Кроме того, эта тема вводит в заблуждение, было обнаружено очевидное состояние гонки, но впоследствии игнорируется, и в тексте слишком много интерпретации (в отличие от наблюдения). Таким образом, это не является полезной записью для кого-либо еще. –