Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Original Timers

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Таймер домой  CPU таймеры  Оригинальные таймеры  

Эти таймеры обесценены.Они датируются самыми ранними днями Роста и не соответствуют текущей практике Роста.

  • Интерфейсы одинаковы на всех платформах, но семантика отличается в зависимости от платформы. Время настенных часов измеряется в Windows, а время процессора измеряется в POSIX-подобных системах.
  • Внутренняя реализация использует только стандартные библиотечные функции C/C++, поэтому не может обеспечить желаемую точность и функциональность.
  • Заголовки живут в главном каталоге заголовков Boost.
  • Содержание находится в пространстве именboost.
Please see the Version 2 CPU timers for replacements that conform to current Boost practice.

Библиотека таймеров предоставляет два заголовка и три класса:

Заголовок Класс Функциональность
timer.hpp таймер Время измерения истекло.
progress.hpp progress_timer Измерение прошедшего времени (с использованием таймера), отображение на разрушении.
progress.hpp progress_display Покажите признак прогресса в достижении известной цели.

Цель разработки этих классов была довольно ограниченной - они предназначены для простых целей, таких как время и отчетность о прогрессе для тестов программиста или пакетных рабочих потоков. Спецификации классов прогресса сформулированы в очень общих терминах, чтобы разрешить альтернативные реализации, такие как графические пользовательские интерфейсы.

Class timer

Класс часов измеряет прошедшее время.   Это, как правило, полезно для небольших временных задач.   Предоставляемая им реализация обеспечивает умеренную портативность за счет зависимости от неизвестной точности и точности функции C Standard Library.   Максимальное измеримое истекшее время может составлять 596,5 часов (или даже меньше) для реализации. Из-за этих ограничений этот таймер не может быть надежным и не должен использоваться, если это вызывает беспокойство.

Synopsis

#include <boost/timer.hpp>
namespace boost {
class timer {
 public:
         timer();                        // postcondition: elapsed()==0
  // compiler generated copy constructor, copy assignment, and dtor apply
  void   restart();                      // post: elapsed()==0
  double elapsed() const;                // return elapsed time in seconds
  double elapsed_max() const;  // return estimated maximum value for elapsed()
  // Portability warning: elapsed_max() may return too high a value on systems
  // where std::clock_t overflows or resets at surprising values.
  double elapsed_min() const;            // return minimum value for elapsed()
  }; // timer
} // namespace boost

Exception safety

Конструкторы могут бросать<std::bad_alloc>.  Никакие другие функции не делают исключений.

Future directions

Был очень разумный запрос от Эда Брея о методе определения максимального значения, которое может быть возвращено через elapsed(), но нет способа сделать это портативно. Проблема была поднята с группой, работающей над расширенной функциональностью времени для языка C. Решение может быть через годы в будущем. Между тем, elapsed_max() обеспечивает приближение.

Class progress_timer

Class progress_timer автоматически измеряет прошедшее время, а затем при разрушении отображает прошедшее сообщение времени в соответствующем месте в соответствующей форме.   Поставляемая реализация по умолчанию отображает символ на std::cout.

Class progress_timer часто используется для выполнения программы.   Его использование так же просто, как:

#include <boost/progress.hpp>
int main()
{
   progress_timer t;  // start timing
   // do something ...
   return 0;
}

Которые будут производить некоторые соответствующие результаты, например:

1.23 s

Обратите внимание, что "s" является официальной аббревиатурой System International d'Unités.

Synopsis

#include <boost/progress.hpp>
namespace boost {
class progress_timer : public timer, noncopyable  {
 public:
   progress_timer();
   progress_timer( std::ostream& os ); // os is hint; implementation may ignore
   ~progress_timer();
   }; // progress_display
} // namespace boost

Exception safety

Конструкторы могут бросать<std::bad_alloc>.  Никакие другие функции не делают исключений.

Class progress_display

Дисплей Class progress_ отображает соответствующее указание на прогресс к заранее определенной цели в соответствующем месте в соответствующей форме.   Это удовлетворяет потребность человека знать, развивается ли программа.

Например, если длительное вычисление должно быть выполнено на std::map<>с именем big_map, следующий код будет отображать индикатор прогресса:

  progress_display show_progress( big_map.size() );
  for ( big_map_t::iterator itr = big_map:begin();
        itr != big_map.end(); ++itr )
  {
     // do the computation
     ...
     ++show_progress;
  }

После обработки 70% элементов дисплей может выглядеть примерно так:

0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
************************************

Synopsis

#include <boost/progress.hpp>
namespace boost {
class progress_display : noncopyable {
 public:
   progress_display( unsigned long expected_count );
   // Effects: restart(expected_count)
   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 = "" )
   // Effects: save copy of leading strings, restart(expected_count)
   void           restart( unsigned long expected_count );
   //  Effects: display appropriate scale on three lines,
   //  prefaced by stored copy of s1, s2, s3, respectively, from constructor
   //  Postconditions: count()==0, expected_count()==expected_count
   unsigned long  operator+=( unsigned long increment )
   //  Effects: Display appropriate progress tic if needed.
   //  Postconditions: count()== original count() + increment
   //  Returns: count().
   unsigned long  operator++()
   //  Returns: operator+=( 1 ).
   unsigned long  count() const
   //  Returns: The internal count.
   unsigned long  expected_count() const
   //  Returns: The expected_count from the constructor.
   }; // progress_display
} // namespace boost

Exception safety

Все функции-члены, кроме Count() и Expect_count(), выполняют выход, и поэтому теоретически могут выбрасывать исключения.   На практике кажется, что исключение является маловероятным, и, вероятно, подразумевает такие серьезные проблемы, что исключение оправдано.   Обратите внимание, что нет явного деструктора, поэтому бросание деструктора не является проблемой.

History

Эти классы произошли от более старых функций C++ и C, которые были полезны программистам в течение многих лет. Через список рассылки Boost Рид Свитман предложил отделить более полезный класс таймера от более целевых классов прогресса. Шон Корфилд предложил разрешить выход на любой ostream.  Дэйв Абрахамс, Валентин Боннард, Эд Брей, Энди Глю и Дитмар Кюль также предоставили полезные комментарии.   Эд Брей предложил таймер::elapsed_max(). Джон Мэддок предложил таймер::elapsed_min(). Toon Knapen предложил дополнительные ведущие строки, чтобы позволить маркировать дисплей прогресса

Rationale

Ранние версии классов таймеров имели отдельные файлы реализации.   Это создавало проблемы для пользователей, не желающих создавать библиотеки, создавало трудности с созданием DLL (из-за каскадного использования других библиотек, что, в свою очередь, приводило к недостаткам подсвеченных компиляторов) и приводило к тому, что классы не использовались даже тогда, когда это явно применимо.   Таким образом, реализация была изменена на весь встроенный код.

Было несколько запросов на конкретные реализации платформы для использования предположительно высокопроизводительных таймеров из API операционной системы. Джон Мэддок представил реализацию с использованием Win32 API. Тесты показали, что, хотя точность этих таймеров была высокой, задержка иногда была намного выше, чем для функции std::clock(), и это очень плохо. Кроме того, результаты использования API Win32 были очень зависимы как от компилятора (испытывались Microsoft и Borland), так и от версии операционной системы (Windows NT, Windows 95 и т. д.)   Таким образом, функция std::clock() была гораздо более надежной, и поэтому сохранялась даже на этой платформе с собственным API таймера.


Пересмотрено:04 Октябрь 201104 October 2011[ORIG_END] -->

© Copyright Beman Dawes 1999.

Распространяется в соответствии с Лицензией на программное обеспечение Boost, версия 1.0. См.www.boost.org/LICENSE_1_0.txt

Статья Original Timers раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:59:00/0.010054111480713/1