Realizacjia opóźnienia czasowego w C++ pod linuksem


(K Nowakowski2) #1

Mam pytanie jak napisać program który będzie wyświetlał tekst z opóźnieniem np.

include

include

void main()

{

for(i=0;i<10;i++)

{

cout<<".";

sleep(500);

}

}

Po uruchomieniu tego programu kropki wyświetlają się nie jedna po drugiej z opóźnieniami ale wszystkie od razu po opóźnieniu :expressionless: nie wiem dlaczego .


(Sawyer47) #2

No niestety nie ma w C++ standardowej funkcji sleep(). Pomijając poprawność tego kodu to wystarczy załączyć plik nagłówkowy - zadziała pod GNU/Linux i na innych unikso-podobnych (np. *BSD) chyba też, chociaż nie sprawdzałem i nie jestem pewny.


(Fiołek) #3

Wyświetlają się wszystkie na raz ponieważ strumienie w C++ są buforowane. Dodaj po "." "<< flush()" i będzie działać tak jak chcesz.


(K Nowakowski2) #4

jeszcze jedno pytanie w jakiej bibliotece jest "flush()" ?


(Sawyer47) #5

W iostream. Można albo wywołać metodę obiektu cout - cout.flush();, albo posłać manipulator do strumienia - cout << flush;


(K Nowakowski2) #6

super działa zrobiłem tak:

cout<<"."<

sleep(1);

ciekawi mnie jeszcze czy da się ustawić w sleep opóźnienie mniejsze niż jedna sekunda

jak próbuje wpisać np

sleep(0.1)

to po kompilacji wypluwa że można tam wpisać tylko int unsigned i że double się nie da

może jest jakiś inny sposób?


(Sawyer47) #7

Trzeba by skorzystać z innych implementacji. Zresztą ta funkcja sleep nie znajduje się w standardowej bibliotece, tzn. oficjalnie C++ nie ma wbudowanej funkci sleep. Trudno mi więc ocenić przenośność i elegancję tego rozwiązania, dosyć dziwne, że w iostream znajduje się funkcja sleep (choć nie znalazłem jej deklaracji w /usr/include/c++).

Możesz użyć innych bibliotek - boost lub Qt. sleep w Boost nie jest zbyt wygodna, ale jest. Natomiast Qt jest olbrzymie i używanie go tylko dla sleep to przesada.

Linki:

http://www.boost.org/

http://trolltech.com/products/qt/

PS. Możesz poszukać innych implementacji, ja wymieniłem te które znam.

PS2. Zapomniałem, w znajduje się też funkcja usleep - http://www.opengroup.org/onlinepubs/007 ... std.h.html


(K Nowakowski2) #8

ok świetnie działa tak jak chciałem wielkie dzięki :wink:

użyłem

include

//i jest tak:

for(int i=0;i<10;i++)

{

cout<<"."<

usleep(400000);

}