QT -> timer loop,会不会导致栈溢出

QT -> timer loop, would this cause a stack overflow

以下会造成堆栈溢出吗?

// reference elsewhere
this->update();


void devices::Sprinkler::update(){
    if(this->_state == devices::Sprinkler::State::ON) {
        ...
        QTimer::singleShot(this->_updateFrequency, this, SLOT(update()));
    }
}

我知道如果是

update() {
    update(); // stack overflow 
}

但我不完全理解前者的行为方式。

不,它不会导致堆栈溢出,因为调用不是递归的。 QTimer::singleShot() 安排调用 稍后执行 ,允许 update() 在再次调用之前退出并清理其堆栈帧,从而重用堆栈 space.