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

时间:2017-01-13 00:54:45

标签: c++ qt slowdown

所有内容都在标题中:)

为什么我需要这个:

我用Qt在C ++中创建了一个小型可玩的数独游戏。我已经制作了经典的回溯方法来解决它。用户可以实时查看分辨率进度。我已经设置了一个滑块,允许用户调整分辨率。

这是我在决议方法的乞讨中放慢了进程的速度:

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

但是,由于用户启动分辨率,他无法改变速度(延迟),因为应用程序大多数时间都处于休眠状态。

任何其他减慢过程的方法?

ps:请原谅我粗鲁的英语:/

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

睡眠是一种减慢应用程序速度的好方法,因为如果你想让用户在一个单独的线程上改变你应该这样做的速度,那么这个时间会发生变化中断睡眠线程并设置新延迟。

答案 2 :(得分:-2)

你做了一个循环,并在一组间隔

中调用绘制/写入函数
<div class="work-wrapper">
  <div id="firstshirt" class="container">
    <div id="boxes" class="container">
      <img id="img-1" src="https://torcdesign.com/shirts/brown.jpg" />
    </div>
  </div>
  <div class="control-wrapper">
    <h3>Controls</h3>
    <a id="btn-Preview-Image" class="button">Preview</a>
    <a id="download" download="my_image.png" class="button disabled" href="#">Download Image</a>
    <select id="imajes45">
      <option value="">Choose Source</option>
      <option value="new-upload">Upload Images</option>
      <option value="select-item">Select Item</option>
    </select>
    <div class="file-upload-wrapper" id="draggableHelper" style="display: none;">
      <input type="file" class="upload-img" name="file1" id="upload-img-1" />
      <div id="upload-preview" class="small upPreview">
        <span>0/3</span>
        <ul id="preview-gallery" class="gallery ui-helper-reset ui-helper-clearfix">
        </ul>
      </div>
    </div>
    <select name="subselector" class="file-select" style="display: none;">
      <option value="">Choose Gallery</option>
      <option value="bulldog">Bulldogs</option>
    </select>
    <div id="bulldog-gallery" class="upPreview hidden">
      <ul class="gallery ui-helper-reset ui-helper-clearfix">
        <li class="ui-widget-content ui-corner-all"><img src="https://torcdesign.com/clipart/pT78gE6pc.gif" class="icon" /></li>
        <li class="ui-widget-content ui-corner-all"><img src="https://torcdesign.com/clipart/LiKkRqkeT.gif" class="icon" /></li>
      </ul>
    </div>
  </div>
</div>
<h3>Result:</h3>
<div>
  <div id="previewImage"></div>
</div>

或通过包含Windows.h使用睡眠

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

或将它们组合

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