从外部改变正在运行的函数内的变量是否可行?

为了方便讲述,我把问题压缩下。

有一个界面,当点击开始按钮后,下面的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;
}
阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题