Narzędzia użytkownika

Narzędzia witryny


timer

To jest stara wersja strony!


Biblioteka Boost::Timer

Łukasz Dobrodziej T-TIZ

Wstęp

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.

Klasa timer

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

Klasa progress_timer

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”
}

Klasa progress_display

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. 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%
|----|----|----|----|----|----|----|----|----|----|
************************************

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.

timer.1240078692.txt.gz · ostatnio zmienione: 2009/04/18 20:18 przez lucas