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.
以下会造成堆栈溢出吗?
// 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.