PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 111


($start[0] + $start[1] )

print That took $delta_time seconds\n , Press return when ready. That took 0.3037 seconds

Программа получилась более длинной, поскольку системные функции вызы­ваются непосредственно из Perl, а в Time::HiRes они реализованы одной функци­ей С. К тому же она стала сложнее — для вызова специфических функций опе­рационной системы необходимо хорошо разбираться в структурах С, которые передаются системе и возвращаются eii. Некоторые программы, входящие в по­ставку Perl, пытаются автоматически определить форматы pack и unpack по за­головочному файлу С. В нашем примере sys/syscall.ph — библиотечный файл Perl, сгенерированный утилитой Ii2ph, которая преобразует заголовочный файл sys/ syscallh в sys/syscall.ph. В частности, в нем определена функция &SYS_gettimeof day, возвращающая номер системного вызова для gettimeofday.

Следующий пример показывает, как использовать Time::HiRes для измерения временных характеристик:

use Time HiRes qw(gettimeofday),

# Вычислить среднее время сортировки


3.10. Короткие задержки 109

$size = 500, $number_of_times = 100 $total_time = О

for ($i =0, $i < number_of_times $i++) { my (is>array, $j, $begm, $time),

# Заполнить массив
@array = (),

for ($]=0, $j<$size $]++) { push(@array, rand) }

# Выполнить сортировку
$begm = gettimeofday,

@array = sort { $a <=> $b } ©array $time = gettimeofday=$t1, $total_time += $time,

printf On average, sorting %d random numbers takes %5 f seconds\n

$size ($total_time/$number_of_times), On average, sorting 500 random numbers takes 0.02821 seconds

t> Смотри также--------------------------------------------------------------------------------------------

Документация по модулям Timc::HiRes и BenchMark с CPAN; описание функ­ции syscall в perlfunc(l); man-страница syscall(2).

3.10. Короткие задержки

Проблема

Требуется сделать в программе паузу продолжительностью менее секунды.

Решение

Воспользуйтесь функцией select, если она поддерживается вашей системой:




- Начало -  - Назад -  - Вперед -