Embarcadero - Label i petla

Embarcadero - Label i petla
MK
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:3
0

Mam następujący problem.

umieściłem komponent Label i robię zwykłą pętle
Problem jest taki że chcę podglądać postęp obliczeń i obserwować jak zmienia się i.
Niestety ale podczas działanie programu się nic nie zmienia a na końcu pokazuje się mi wynik 9999. Włączenie DoubleBuffered dla TForm też nie pomaga
{
for (int i = 0; i < 100000; i++)
{
Label1->Caption=i;
Funkcja (i);
}

Robię to w XE8. Co robię źle?

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Szczecin
1

Blokujesz pętlę główną programu. Do tego typu zastosowań prawdopodobnie powinieneś użyć timera lub odpalić jakieś process_events() wewnątrz pętli. Wg google to by było Application->ProcessMessages();

Takie rozwiązanie będzie działać, ale jest głupie i świadczy o złym designie. Po stronie UI powinny być tylko krótkie funkcje obsługujące wyświetlanie eventów, niezawierające jakiejś skomplikowanej logiki, szczególnie blokującej.


edytowany 1x, ostatnio: kq
MK
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:3
0

Wprowadzenie do kodu np. Sleep(1000) nic nie daje. czekam po prostu dłużej.

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Szczecin
0

timer to nie jest sleep.

Poza tym, co z Application->ProcessMessages()?


MK
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:3
0

Application->ProcessMessages()
Działa. Co prawda nie da się w trakcie aplikacji zamknąć okna (x), ale mam to co szukałem
Dzięki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.