函数Sleep()的奇怪行为在Delphi中重复使用

use*_*772 5 delphi sleep delphi-7 repeat

我有按钮点击反应的功能.当我点击按钮时,它应该开始重复并从数组中写入值并在主窗体上的标签中显示它们.问题是功能睡眠 - 有一些错误或什么的,因为当我点击按钮它等待很长时间然后它最终开始动作但很快.我们来看看我的代码.感谢建议.

procedure TForm1.ButtonMereniClick(Sender: TObject);
var
  iterator: Integer;
begin      
  iterator := 1;
  repeat       
    //write some values stored int arrays to labels on form
    LabelTeplota.Caption:='Teplota: '+FloatToStr(poleTeplota[iterator]);
    LabelVlhkost.Caption:='Vlhkost: '+FloatToStr(poleVlhkost[iterator]);
    LabelTlak.Caption:='Atmosférický tlak: '+FloatToStr(poleTlak[iterator]);
    LabelRychlost.Caption:='Rychlost v?tru: '+FloatToStr(poleRychlost[iterator]);
    LabelRychlost.Caption:='Rychlost v?tru: '+FloatToStr(poleRychlost[iterator]);
    LabelIterator.Caption:='iterator: '+IntToStr(iterator);
    Sleep(500);//should be 5000 
    Inc(iterator);
  until iterator = 20;
end;
Run Code Online (Sandbox Code Playgroud)

klu*_*udg 19

不要Sleep在GUI线程中使用函数,因为您阻止了正常的消息处理,并且您的应用程序行为异常.

目前尚不清楚您Sleep在代码中使用的原因.可能你应该从组件的OnTimer事件处理程序更新标签TTimer而不是使用循环.

  • +1这是正确的答案.阻止GUI线程始终是一个糟糕的举动.使用计时器. (2认同)