• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja Sleep()

Object Storage Arubacloud
+1 głos
1,679 wizyt
pytanie zadane 12 maja 2015 w C i C++ przez Pinio Gaduła (3,520 p.)

Używam funkcji sleep by dla jednego label'a wyświetlać kolejno nowe napisy. Problem polega na tym, że program zawsze pokazuje moj ostatni napis("Moj tekst 3") mimo tego że uzywam sleep'a między kolejnymi zmianami. Czy pisząc w windowsForms muszę dodatkowo jeszcze w jakiś sposób odświeżać całe okno czy może jest jakaś lepsza funkcja która chwilowo mnie zamrozi i będzie prawidłowo pokazywała kolejne przejscia?
            

            this->label1->Text = "Moj tekst 1"; 
            Sleep(1000);
            this->label1->Text = "Moj tekst 2"; 
            Sleep(1000);
            this->label1->Text = "Moj tekst 3"; 


   

3 odpowiedzi

0 głosów
odpowiedź 12 maja 2015 przez Patryk Nowicjusz (140 p.)
Myślę że nasz wszystko dobrze, ale zobacz czy dodałeś bibliotekę <windows.h>.
komentarz 12 maja 2015 przez Dorion300 Szeryf (90,250 p.)
To by mu wywalało błąd że nie znalazło funkcję "sleep".....
komentarz 12 maja 2015 przez Pinio Gaduła (3,520 p.)
dokladnie, windows h jest ale dobra uwaga
0 głosów
odpowiedź 12 maja 2015 przez Kelmac Gaduła (3,970 p.)

Nie wiem jak jest w windows form,a le keidyś przy budowie aplikacji okienkowych dawało sie coś takiego jak timer.


po uruchomieniu tej funkcji powinienes zalaczyc timera , który odmierzy dana ilośc czasu i podejmie odpowiednie działanie , np wywoła funkcje która zmieni tekst. i tak wkólka kilka razy, po ostatniej zmianie wyłączasz timera.

P.S. Jak dobrze mi sie zdaję, Sleep() zawiesza cały proces na daną ilośc sekund czyli twoje ono prawdopodobnie nie bedzie reagować przez ten czas.  Jak będziesz mieć taki timer (gotowy , albo sam go napiszesz) któy będzie odliczał czas w osobnym wątku to nie zamrozisz całej aplikacji.


np mniej wiecej cos takiego 

int ile_razy_timer=0;


void funkcja_zmiany_tekstu(...)
{

switch(ile_razy_timer)
{
case 0: 
this->label1->tekst = "Mój tekst 1"; break;

case 1:
this->label1->tekst = "Mój tekst 2"; break;
case 2:
this->label1->tekst = "Mój tekst 3"; break;
default:
this->label1->tekst = ""; break;
}

if(ile_razy_timer<2) 
{
licznik++
Timer->Start(); // uruchamiasz timerr żeby zliczał czas w dół
}

}


void Timer(...) // dokładnie nie wiem jak ten timer ma być, ale po skończeniu czasu niech wywoła tą funkcje;
{
 funkcja_zmiany_tekstu(...);
}



mniej wiecej taki tok rozumowania, chociaż z implementacją gorzej :D

Mam andzieje że jakoś nakreśliłem tok myslenia, albo wpadniesz na coś lepszego :D

 

komentarz 12 maja 2015 przez Pinio Gaduła (3,520 p.)
Super dzięki za chwile to sprawdzę...własnie chciałem to zrobić bez timera ale zawsze to jakieś wyjście:)
0 głosów
odpowiedź 17 maja 2015 przez Bartek85 Mądrala (7,440 p.)

Twój problem polega na tym, że uruchamiasz Funkcję Sleep na głownym wątku, więc nie ma prawa się odświezyć. Rozwiązanie Twojego problemu jest proste, operacje czekania wykonać asynchronicznie w stosunku do głównego wątku. Nie wiem jaką masz logike porgramu... Jezeli chcesz na coś czekać, najlepiej jest uzyć jakiegoś pobocznego wątku. Tutaj jest kilka rozwiązań w zalezności co potrzbujesz... Thread, BackgroundWorker, Task... Dobierając sie do kontrolek UI z innego wątku, musisz być ostrożny, aby nie doszło do

Cross-thread operation not valid: Control 'xxx' accessed from a thread other than the thread it was created on

Komunikat ten mówi o tym, że wszystkie kontrolki z UI muszą być odświeżane tylko z wątku głównego. Ale to też nie problem, bo używając metody Invoke, lub BeginInvoke, możesz zniwelowac ten problem. Obydwie funkcjonalności dobrze są opisane na msdn.

Podobne pytania

0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 23 kwietnia 2019 w Java przez PabloMajo Nowicjusz (170 p.)
0 głosów
3 odpowiedzi 1,012 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez MsMaciek123 Pasjonat (24,760 p.)
0 głosów
2 odpowiedzi 1,861 wizyt
pytanie zadane 18 grudnia 2016 w C i C++ przez Michał Biernacki Użytkownik (670 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...