Как замедлить выполнение метода, не замораживая поток / приложение?

Все есть в названии 🙂

Зачем мне это нужно:

Я создал небольшую играбельную судоку на C ++ с помощью Qt. Я сделал классический метод возврата, чтобы решить эту проблему. Пользователь может видеть прогресс разрешения в режиме реального времени. Я поставил слайдер, позволяющий пользователю регулировать скорость разрешения.

Вот что я положил в начале метода разрешения, чтобы замедлить процесс:

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

НО, поскольку пользователь запускает разрешение, он не может изменить скорость (задержку), потому что приложение спит большую часть времени.

Любой другой способ замедлить процесс?

PS: пожалуйста, извините мой грубый английский: /

1

Решение

Используйте timerEvent (). QObject имеет встроенную поддержку таймера. Поместите каждый игровой шаг в timerEvent () и вызовите startTimer () с необходимым интервалом. Это, безусловно, самый простой способ сделать это.

3

Другие решения

Спящий режим — это хороший способ замедлить работу приложения, так как он освобождает процессор для выполнения других задач. Если вы хотите, чтобы пользователь мог изменять скорость, вы должны делать это в отдельном потоке, когда это время изменяется, прерывая спящий режим. нить и установить новую задержку.

1

Ну, вы делаете цикл и вызываете функцию рисования / записи через набор интервалов

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();
}
}
-2
По вопросам рекламы [email protected]