如何在不冻结 thread/application 的情况下减慢方法执行速度?
How to slow down a method execution without freezing the thread/application?
一切尽在标题中:)
为什么我需要这个:
我用 Qt 用 C++ 创建了一个小型的可玩数独游戏。我做了一个经典的回溯方法来解决它。用户可以在real-time中看到解析进度。我放了一个滑块允许用户调整分辨率速度。
这就是我在请求解决方法时放慢进程的内容:
sleep_for(milliseconds(delay)); //delay is a toggleable static variable
但是由于用户启动了分辨率,他无法更改速度(延迟),因为应用程序大部分时间都在休眠。
还有其他方法可以减慢进程吗?
ps : 请原谅我粗糙的英语 :/
Sleep 是降低应用程序速度的好方法,因为它可以释放处理器来做其他事情,如果您想让用户更改速度,您应该在单独的线程上执行此操作,当时间更改会中断休眠线程并设置新延迟。
好吧,你做一个循环,然后在一组间隔
中调用draw/write函数
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();
}
}
使用 timerEvent()。 QObject 具有内置的计时器支持。将每个游戏步骤放入 timerEvent() 并以所需的时间间隔调用 startTimer()。这是迄今为止最简单的方法。
一切尽在标题中:)
为什么我需要这个:
我用 Qt 用 C++ 创建了一个小型的可玩数独游戏。我做了一个经典的回溯方法来解决它。用户可以在real-time中看到解析进度。我放了一个滑块允许用户调整分辨率速度。
这就是我在请求解决方法时放慢进程的内容:
sleep_for(milliseconds(delay)); //delay is a toggleable static variable
但是由于用户启动了分辨率,他无法更改速度(延迟),因为应用程序大部分时间都在休眠。
还有其他方法可以减慢进程吗?
ps : 请原谅我粗糙的英语 :/
Sleep 是降低应用程序速度的好方法,因为它可以释放处理器来做其他事情,如果您想让用户更改速度,您应该在单独的线程上执行此操作,当时间更改会中断休眠线程并设置新延迟。
好吧,你做一个循环,然后在一组间隔
中调用draw/write函数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();
}
}
使用 timerEvent()。 QObject 具有内置的计时器支持。将每个游戏步骤放入 timerEvent() 并以所需的时间间隔调用 startTimer()。这是迄今为止最简单的方法。