C++ Builder funkcja Sleep();

0

Witam.
Mamy taki kod:

 
void __fastcall TForm1::pole9Click(TObject *Sender)
{
pole9->Picture->LoadFromFile("img/x.bmp");
Sleep(1000);
pole8->Picture->LoadFromFile("img/x.bmp");
}

Po kliknięciu na przycisk powinien się pokazać od razu obrazek, następnie po sekundzie powinień się pokazać następny rysunek.
I tu dziwne zachowanie funkcji Sleep() bo po kliknięciu nie pokazuje się obrazek od razu tylko po sekundzie pokazują się dwa na raz. Jak to możliwe?

3

Blokujesz wątek odpowiedzialny za odświeżenie GUI. Rozwiązanie: nie blokuj w wątku GUI (nawet antyczny BCB powinien mieć jakiś timer).

0

Ma ktoś jakiś pomysł jak zastąpić funkcję Sleep()?

0

Wystarczyło wyszukać "bcb timer"

http://www.functionx.com/bcb/controls/timer.htm

0
kq napisał(a):

Blokujesz wątek odpowiedzialny za odświeżenie GUI. Rozwiązanie: nie blokuj w wątku GUI (nawet antyczny BCB powinien mieć jakiś timer).
Jest jeszcze jedno pośrednie rozwiązanie. Wystarczy wymusić obsługę wszystkich zalegających komunikatów będących w kolejce.

void __fastcall TForm1::pole9Click(TObject *Sender)
{
  pole9->Picture->LoadFromFile("img/x.bmp");
  Application->ProcessMessages();
  Sleep(1000);
  pole8->Picture->LoadFromFile("img/x.bmp");
}

Chociaż rozwiązanie z timerem będzie bardziej eleganckie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1