Difference between revisions of "DbgHRPCAvailable"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:43, 7 February 2021
DbgHRPCAvailable (Функции отладки) | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Отладочная функция проверяет, включен ли на данной машине таймер высокой точности (High-Resolution Performance Counter, обычно включение происходит в BIOS компьютера). Таймер высокой точности позволяет точно замерить время выполнения операций, также он используется встроенным в отладчик профайлером, без него профайлер будет подсчитывать только количество вызовов, но не время их исполнения.
Синтаксис
dbgHRPCAvailable():<Можно ли использовать т.в.т. (INT)>
Возвращаемое значение
Функция возвращает 1, если т.в.т. доступен в системе, 0 в ином случае.
Примеры
//Создаем переменную заранее a:=0; Чл1:=Date(); For i:=1 To 1000000 Do a:=0; EndDo; Чл1:=GetPeriodMs(Чл1); Message("Руководствуясь системными часами, миллион операций присваивания занял: "+Чл1+" мс."); If DbgHRPCAvailable Then Чл2:=dbgHRPCCurrent(); For i:=1 To 1000000 Do a:=0; EndDo; Чл2:=dbgHRPCGetPeriod(Чл2); Чл2:=Чл2/1000000; Message("Руководствуясь т.в.т., миллион операций присваивания занял: "+Чл2+" мс."); EndIf; //Для i5: //"Руководствуясь системными часами, миллион операций присваивания занял: 593 мс." -- точность этого таймера составляет не более 20мс. //"Руководствуясь т.в.т., миллион операций присваивания занял: 597.547944 мс." -- точность этого таймера очень велика (зависит от конкретной машины) // Если исполнить блок несколько раз, появится разброс в показаниях, обусловленный тем, что операционная система в фоне может выполнять другие процессы. //Нужно заметить, что эксперимент не совсем верно ответил на вопрос, какое время занимает выполнение миллиона операций присваивания, так как // и для первого и для второго случая, в это время включаются дополнительные команды конструкции цикла и нахождения времени после окончания цикла. //Чтобы исключить время исполнения инструкций цикла и других инструкций, достаточно провести замер без инструкции "a:=0". Для двух циклов, // время должно быть несколько разным, так как GetPeriodMs и dbgHRPCGetPeriod занимают разное время. // //Также можно использовать встроенный профайлер, однако, при включенном профайлере скорость исполнения инструкций будет несколько ниже.