为了方便讲述,我把问题压缩下。
有一个界面,当点击开始按钮后,下面的start函数会执行,你可以看到,只要paused
一直为假,它就会一直执行下去。因为我给它内部加了一个CoreApplication::processEvents();,所以现在界面还是可以响应的。当我按下暂停按钮后,pause函数就会被调用,接着start也会退出。我试了下这样的做法,没有出现什么问题,但是我不确定这样的做法是否有其他我还没看到的危险。
int n = 1;
void start()
{
while (1)
{
if (paused)
return;
qDebug() << n++;
QElapsedTimer timer;
timer.start();
while (timer.elapsed() <= 500)
QCoreApplication::processEvents(); // 保证界面响应
}
}
void pause()
{
paused = true;
}