Замјена за Sleep функцију у Delphi-ју

  • У Delphi-ју, коришћење Sleep  функције може узроковати замрзавање корисничког интерфејса. Ако желите да паузирате извршавање без блокирања GUI, можете користити следеће алтернативе:

      • TTimer – користите komponentu TTimer koja може периодично извршавати код без блокирања главне нити. Конфигуришите вријеме интервала у милисекундама, а када се тимер активира, извршиће се догађај  OnTimer .
    var 
    
      Timer: TTimer; 
    
    procedure TForm1.Timer1Timer(Sender: TObject); 
    
    begin 
    
      // Kod koji želite da izvršite 
    
      Timer.Enabled := False;  // Isključite timer nakon izvršenja 
    
    end; 
    
    procedure TForm1.StartTimer; 
    
    begin 
    
      Timer := TTimer.Create(Self); 
    
      Timer.Interval := 1000; // 1 sekunda 
    
      Timer.OnTimer := Timer1Timer; 
    
      Timer.Enabled := True;  // Aktivirajte timer 
    
    end;
      • Thread – ако имате задатак који траје дуже, можете га покренути у новој нити (TThread). Ово ће омогућити да се програм настави да реагује док се задатак извршава у позадини.
    type 
    
      TMyThread = class(TThread) 
    
      protected 
    
        procedure Execute; override; 
    
      end; 
    
    procedure TMyThread.Execute; 
    
    begin 
    
      // Dugo izvršavanje 
    
      Sleep(10000); // Simulacija dugotrajnog procesa 
    
      Synchronize(procedure begin 
    
        // Ažurirajte UI ovde 
    
      end); 
    
    end;
      • Asynchronous Programming – коришћење async/await pristupa (од верзије Delphi 10 Seattle) омогућава асинкроно програмирање, што може бити корисно за неблокирање UI.

    procedure TForm1.DoSomethingAsync;  begin    TTask.Run(procedure    begin      Sleep(1000); // Simulacija posla u pozadini      TThread.Synchronize(nil, procedure      begin        // Ažurirajte UI ovde      end);    end);  end;

    • Све ове методе омогућавају извршавање задатка без замрзавања апликације и одржавање респонсивности корисничког интерфејса.

    procedure Delay(msecs: Longint); // pauza u mili sekundama (zamjena za BP funkciju) var   FirstTickCount: Longint; begin   FirstTickCount := GetTickCount; // Win API funkcija (vraca vrijeme u ms od paljenja racunara)   repeat     Application.ProcessMessages;     // dozvoljava pristup drugim kontrolama i procesima dok traje pauza   until ((GetTickCount - FirstTickCount) >= Longint(msecs)); end;

Аутор :       Драшко Шикањић   

05. 09. 2024.

Leave a Reply

Your email address will not be published. Required fields are marked *