Время работы программы

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Время работы программы

Сообщение Vadim »

Посоветуйте кроссплатформенное средство для подсчёта времени работы программы, не привязанное к функциям даты. Считать нужно в секундах, а не в тиках процессора (про RTDSC я знаю... :-) ). Windows, Linux.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Прямой доступ к контролеру тактового генератора. Естественно, на ассемблере.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Вы тут с ассемблером с дуба рюхнулись. Забыть про него давно надо. Тем более кроссплатформенный.

Любой таймер тикающий каждую единицу времени (секунду) в обработчике простой инкремент переменной, хранящей время работы в этих еденицах
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Лекс Айрин писал(а):рямой доступ к контролеру тактового генератора. Естественно, на ассемблере.

Ужас какой... Пошёл за валерьянкой и валидолом... :-D
А есть что-нибудь относительно высокоуровневое?
В принципе можно условную компиляцию сделать:

Код: Выделить всё

function GetSeconds(): longint;
begin
{$IFDEF WINDOWS}
  result:=GetTickCount div 1000;
{$ELSE}
  result:= ???????
{$ENDIF}
end;


Добавлено спустя 1 минуту 21 секунду:
zub писал(а):Любой таймер тикающий каждую единицу времени (секунду) в обработчике простой инкремент переменной, хранящей время работы в этих еденицах

Окошек нет - чистая консоль...
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

EpicTimer?
MysticCoder
постоялец
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Сообщение MysticCoder »

Vadim писал(а):В принципе можно условную компиляцию сделать:


GetTickCount зависит от частоты проца и может ускоряться\замедляться. Построенная на нем игруха на другом компе у меня шла в 5 раз быстрее :D +32хбитность через несколько дней даст переполнение. Лучше замени на связку NTQueryPerfomanceCounter и NTQueryPerfomanceFrequency или что то типа того.

под линух:

Код: Выделить всё

{$IFDEF LINUX}
function GetTickCount: Cardinal;
var
  tv: timeval;
begin
  gettimeofday(tv, nil);
  Result := int64(tv.tv_sec) * 1000 + tv.tv_usec div 1000;
end;
{$ENDIF}
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Плюсую за EpicTimer
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

zub писал(а):Вы тут с ассемблером с дуба рюхнулись. Забыть про него давно надо.


Увы... для некоторых штучек типа сверхточных таймеров он идеален. Что-то более высокоуровневое в данном случае менее надежно. Единственное... даст ли система подцепиться к обработчику.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>Прямой доступ к контролеру тактового генератора. Естественно, на ассемблере.
ну давайц, получи доступ хоть к чемунить железному в современной оси.

>>Увы... для некоторых штучек типа сверхточных таймеров он идеален
сим извещаю - MSDOS умер.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

MysticCoder писал(а):...+32хбитность через несколько дней даст переполнение.

Нынешний компилятор напоминает, что нынче надо использовать GetTickCount64()... ;-) Но вряд ли это придаст стабильности, т.к. всего лишь увеличивает объём хранилища под 64-битные системы.

Добавлено спустя 1 минуту 6 секунд:
zub писал(а):EpicTimer?

Ок. Посмотрю, что там внутри...
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

zub писал(а):сим извещаю - MSDOS умер.


Я не знаю как в десятке, но в ХР он живее всех живых... Пошукал... и в десятке от этого недостатка не избавились совсем. Просто засунули в глубь системы и заперли на пару замков. В никсах с этим вроде как посложнее.

zub писал(а):ну давайц, получи доступ хоть к чемунить железному в современной оси.


Может и стоит попробовать. Найду только справочник по прерываниям биоса. Впрочем, даже если не получится, то это ровным счетом ничего не значит -- в ассемблере я так до конца и не разобрался. Да и нужно это преимущественно при написании драйверов.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Лекс Айрин писал(а):Может и стоит попробовать. Найду только справочник по прерываниям биоса. Впрочем, даже если не получится, то это ровным счетом ничего не значит...

На самом деле многие прерывания будут нормально работать. Вот только в отличие от чистого MSDOS, это будет эмуляция на основе WinAPI. Заранее предупреждаю - лезть с прерываниями для видеокарт типа CGA или EGA не стоит, операционка будет изрядно удивлена... :-D
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Vadim, да в курсе я. И даже не совсем эмуляция. Фактически, обработчики прерываний просто заменены Если честно, я не ожидал, что кто-то серьезно воспримет мои слова :lol: Просто показал. что это желание немного странноватое. Чем более высокоуровневые функции, тем меньше точность таймера.
Vadim писал(а):Заранее предупреждаю - лезть с прерываниями для видеокарт типа CGA или EGA не стоит, операционка будет изрядно удивлена...

Логично. Уж эти точно переписаны.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Лекс Айрин писал(а):Чем более высокоуровневые функции, тем меньше точность таймера.

Ну, милисекунды мне и не нужны. Функции тяжёлые и многоповторяющиеся, так что речь идёт о десятках и сотнях секунд...
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Вы про какие прерывания? INT xxH чтоли? это никакой не прямой доступ, это просто способ вызвать соответствующую процедуру
Прямой доступ он через порты, и любая нормальная операционка сразу грохнет пользовательскую программу при таких попытках
Ответить