To jest stara wersja strony!
Łukasz Dobrodziej T-TIZ
Biblioteka Timer zapewnia trzy klasy, które umożliwiają kontrolę czasu - klasę timer
do mierzenia czasu, który upłynął od danego momentu, klasę progress_timer
do raportowania czasu oraz klasę progress_display
do wyświetlania wskaźnika postępu. Klasy są wyposażone w obsługę wyjątków np. konstruktory mogą rzucić std::bad_alloc. W praktyce rzucanie wyjątków przez obiekty tych klas jest mało prawdopodobne.
Umożliwia mierzenie czasu. Jej implementacja oferuje umiarkowaną przenośność zależną od nieznanej dokładności i precyzji funkcji clock() z biblioteki standardowej języka C. Maksymalny czas jaki pozwala zmierzyć wynosi nie więcej niż 596.5 godzin. Ze względu na te ograniczenia klasa timer nie jest uznana za silną i nie powinna być używana w programach, w których jej ograniczenia mogłoby się okazać krytyczne. Klasa udostępnia cztery metody:
elapsed()
zwraca czas w sekundach, który upłynął od chwili utworzenia obiektu klasy timer bądź jego zrestartowania.restart()
zeruje timer. elapsed_min()
zwraca minimalną wartość jaką może wskazać funkcja elapsed(). elapsed_max()
zwraca oszacowaną wartość maksymalną dla funkcji elapsed(), wartość ta może być przekłamana na niektórych platformach z powodu problemów z std::clock_t. Przykład użycia:
boost::timer t; // uruchomienie zegara (rozpoczecie odmierzania czasu) for (int i=0; i<10000000; ++i) std::rand(); std::cout << t.elapsed() << std::endl; //wyswietlenie aktualnej wartosci timeru
Automatycznie mierzy upływający czas a następnie w czasie destrukcji wyświetla informacje o zmierzonym czasie w odpowiednim miejscu i formie. W implementacji jako miejsce wyświetlania domyślnie ustawiony jest strumień std::cout. Klasa progress_time jest najczęściej używana do mierzenia czasu wykonania programu. Przykład użycia:
int main() { progress_timer t; // uruchomienie zegara // cos się wykonuje ... return 0; //program się konczy, na standardowym wyjsciu wyswietlany jest czas wykonania programu w nastepujacej formie ”1.45 s” }
Wyświetla wskaźnik postępu do zdefiniowanego celu w odpowiedniej formie i miejscu. Pozwala to na powiadomienie użytkownika, że program działa i w jakim jest stanie. Klasa może być wykorzystana, gdy na przykład chcemy wykonać skomplikowane obliczenia na dużym kontenerze danych. Klasa udostępnia następujące metody:
count()
zwraca wartość wewnętrznego licznika.expected_count()
zwraca wartość docelową, podaną podczas kontrukcji obiektu.restart(unsigned long expected_count)
ustawia nową wartość docelową, zerując licznik.
Klasa ma przeładowane operatory ++
i +=
, które służą do zwiększania licznika (i jeżeli to konieczne dorysowania odpowiedniego znaku postępu). Dodatkowo pomocy konstruktora możemy zmienić miejsce wyświetlania paska postępu operacji oraz jego formę. Konstruktor ma następującą postać:
progress_display( unsigned long expected_count, std::ostream& os, // os is hint; implementation may ignore const std::string & s1 = "\n", //leading strings const std::string & s2 = "", const std::string & s3 = "" )
Przykład użycia:
progress_display show_progress( big_map.size() ); //inicjalizacja obiektu, zdefiniowanie wartości docelowej for ( big_map_t::iterator itr = big_map:begin(); itr != big_map.end(); ++itr ) { // wykonywanie jakichs obliczen ... ++show_progress; //wyswietlanie postepu na standardowym wyjsciu }
Gdy np. 70% elementów kontenera zostanie przeliczonych zobaczymy następujący obrazek:
0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----| ************************************