Система Turbo Profiler фирмы Borland | страница 27



Writeln('Leaving Route 66');

End;


Procedure Highway80;

Begin

Writeln('Entering Highway 80');

Delay(2000);

Writeln('Leaving Highway 80');

End;


Begin

Writeln('Entering main');

route66;

Writeln('back in main');

Delay(1000);

highway80;

Writeln('back in main');

delay(100);

Writeln('Leaving main');

End.


Задание в качестве «областей» всех подпрограмм в рассматриваемом модуле ведет к образованию четырех переменных для подсчета времени и четырех переменных для подсчета количества вызовов.


Рис. 2.1 Переменные для подсчета времени выполнения и числа вызовов подпрограмм для PTOLL/PTOLLPAS.


Воображаемые пункты сбора подорожной пошлины.


В данном разделе мы проследим за выполнением программы и рассмотрим, что происходит при встрече маркеров «области». Этот процесс можно представлять себе как проход через ряд пунктов, в которых собирается подорожная пошлина. Как только Вы проходите через такой пункт, Вы сразу же попадаете на участок дороги, относящийся к данному пункту и продвигаетесь по этому участку до тех пор, пока не попадете на следующий пункт сбора пошлины.


Перед тем, как Вы попадаете на первый такой пункт и после того, как преодолеваете последний, Вы находитесь на свободной территории. Каждый пункт имеет информацию о том, какое количество времени Вы затратили на прохождение участка дороги, относящегося к данному пункту, а также о том, сколько раз Вы прошли через этот пункт. Но рассматриваемая дорога имеет одно таинственное свойство, которое заключается в том, что двигаться по нему Вы можете только в одном направлении. При этом операторы цикла и перехода подобны воздушным мостам по которым Вас перебрасывают на какие-то другие участки дороги. Во время вашего продвижения по дороге в процессе выполнения программы PTOLL, мы будем считать каждую помеченную нами «область» отрезком этой дороги со стоящими на его концах воображаемыми пунктами для сбора пошлины.


Рассмотрим, каким образом происходит сбор временной и количественной информации для типичной программы, написанной на Паскале или С.


Перед тем, как Вы попадете в функцию main, выполняется стартовый код С. Это еще пока ничейная территория. Каждый импульс таймера, происходящий во время прохождения данного участка, не учитывается, за исключением того случая, когда Вы явно помечаете стартовый код как «область».


Как только Вы преодолели маркер «области» (пункт сбора пошлины), которым помечена функция main переменная, отвечающая за подсчет числа вызовов main, автоматически увеличивается на единицу и каждый импульс таймера, происходящий с момента входа в main до вызова route66, увеличивает значение переменной, в которой учитывается время выполнения функции main.