如何在不冻结线程/应用程序的情况下减慢方法执行速度

How to slow down a method execution without freezing the thread/application?

本文关键字:情况下 方法 速度 执行 应用程序 冻结 线程      更新时间:2023-10-16

一切都在标题中:)

为什么我需要这个:

我在C++与Qt一起创建了一个小型可玩数独游戏。我制作了一种经典的回溯方法来解决这个问题。用户可以实时查看解决进度。我放了一个滑块,允许用户调整分辨率速度。

这就是我乞求解决方法以减慢该过程的内容:

 sleep_for(milliseconds(delay)); //delay is a toggleable static variable

但是由于用户启动了分辨率,他无法更改速度(延迟),因为应用程序大部分时间都在休眠。

还有其他方法可以减慢该过程吗?

PS:请原谅我粗略的英语:/

使用 timerEvent()。QObject内置了定时器支持。将每个游戏步骤放在 timerEvent() 中,并以所需的间隔调用 startTimer()。这是迄今为止最简单的方法。

睡眠是减慢应用程序速度的好方法,因为它释放了处理器来做其他事情,如果你想允许用户改变速度,你应该在单独的线程上这样做,当时间变化时,中断睡眠线程并设置新的延迟。

好吧,

你做一个循环,并在一组间隔内调用绘制/写入函数

int interval = 0;
while(running){
    interval++;
    if(interval == 60){
        draw();
    }
}

或通过包括 Windows.h 来使用睡眠

int fps = 1000/30;
while(running){
    Sleep(fps);
    draw();
}

或将它们组合在一起

int fps = 1000/30;
int interval = 0;
while(running){
    interval++;
    Sleep(fps);
    if(interval == 30){//every more or less 1 sec
        draw();
    }
}
相关文章: