Taras_Serevann
@Taras_Serevann
веб-разработчик, автор

Почему зависает программа Pascal?

Пишу таймер в PascalABC.NET. При создании проекта выбрал проект windows forms.
При нажатии на кнопку программа должна начинать отсчет от 0 секунд до 999 вот этим кодом
var x:integer;
begin
  for x:=1 to 999 do
  begin
  sleep(60);
  label1.Text := inttostr(x);
  end;

но вместо этого она зависает (ошибка windows "приложение не отвечает"). Кто знает, как исправить?
PS: полный код программы
Unit Unit1;

interface

uses System, System.Drawing, System.Windows.Forms;

type
  Form1 = class(Form)
    procedure button1_Click(sender: Object; e: EventArgs);
  {$region FormDesigner}
  private
    {$resource Unit1.Form1.resources}
    button1: Button;
    label1: &Label;
    {$include Unit1.Form1.inc}
  {$endregion FormDesigner}
  public
    constructor;
    begin
      InitializeComponent;
    end;
  end;

implementation

procedure Form1.button1_Click(sender: Object; e: EventArgs);
  var x:integer;
begin
  for x:=1 to 999 do
  begin
  sleep(60);
  label1.Text := inttostr(x);
  end;
end;

end.
  • Вопрос задан
  • 4342 просмотра
Пригласить эксперта
Ответы на вопрос 2
crazyzubr
@crazyzubr
Python backend-developer
Попробуй вставить перед слипом или после него Application.ProcessMessages;
Ответ написан
Комментировать
ragimovich
@ragimovich
Про паскаль утверждать не буду, но что-то подсказывает, что отсчет ведется в основном потоке программы и блокирует GUI, что при кликах в окошке и является в терминах Windows "неотвечающей" программой. Выносите счетчик в отдельный поток (thread) и будет вам счастье. А мою правоту можете проверить уменьшением счетчика до 5 секунд - через 5 секунд программа начнет отвечать даже с вашим кодом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы