Время работы программы
Модератор: Модераторы
Время работы программы
Посоветуйте кроссплатформенное средство для подсчёта времени работы программы, не привязанное к функциям даты. Считать нужно в секундах, а не в тиках процессора (про RTDSC я знаю...
). Windows, Linux.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Прямой доступ к контролеру тактового генератора. Естественно, на ассемблере.
Вы тут с ассемблером с дуба рюхнулись. Забыть про него давно надо. Тем более кроссплатформенный.
Любой таймер тикающий каждую единицу времени (секунду) в обработчике простой инкремент переменной, хранящей время работы в этих еденицах
Любой таймер тикающий каждую единицу времени (секунду) в обработчике простой инкремент переменной, хранящей время работы в этих еденицах
Лекс Айрин писал(а):рямой доступ к контролеру тактового генератора. Естественно, на ассемблере.
Ужас какой... Пошёл за валерьянкой и валидолом...
А есть что-нибудь относительно высокоуровневое?
В принципе можно условную компиляцию сделать:
Код: Выделить всё
function GetSeconds(): longint;
begin
{$IFDEF WINDOWS}
result:=GetTickCount div 1000;
{$ELSE}
result:= ???????
{$ENDIF}
end;Добавлено спустя 1 минуту 21 секунду:
zub писал(а):Любой таймер тикающий каждую единицу времени (секунду) в обработчике простой инкремент переменной, хранящей время работы в этих еденицах
Окошек нет - чистая консоль...
EpicTimer?
-
MysticCoder
- постоялец
- Сообщения: 154
- Зарегистрирован: 14.09.2013 00:20:28
Vadim писал(а):В принципе можно условную компиляцию сделать:
GetTickCount зависит от частоты проца и может ускоряться\замедляться. Построенная на нем игруха на другом компе у меня шла в 5 раз быстрее
под линух:
Код: Выделить всё
{$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}
Плюсую за EpicTimer
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub писал(а):Вы тут с ассемблером с дуба рюхнулись. Забыть про него давно надо.
Увы... для некоторых штучек типа сверхточных таймеров он идеален. Что-то более высокоуровневое в данном случае менее надежно. Единственное... даст ли система подцепиться к обработчику.
>>Прямой доступ к контролеру тактового генератора. Естественно, на ассемблере.
ну давайц, получи доступ хоть к чемунить железному в современной оси.
>>Увы... для некоторых штучек типа сверхточных таймеров он идеален
сим извещаю - MSDOS умер.
ну давайц, получи доступ хоть к чемунить железному в современной оси.
>>Увы... для некоторых штучек типа сверхточных таймеров он идеален
сим извещаю - MSDOS умер.
MysticCoder писал(а):...+32хбитность через несколько дней даст переполнение.
Нынешний компилятор напоминает, что нынче надо использовать GetTickCount64()...
Добавлено спустя 1 минуту 6 секунд:
zub писал(а):EpicTimer?
Ок. Посмотрю, что там внутри...
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub писал(а):сим извещаю - MSDOS умер.
Я не знаю как в десятке, но в ХР он живее всех живых... Пошукал... и в десятке от этого недостатка не избавились совсем. Просто засунули в глубь системы и заперли на пару замков. В никсах с этим вроде как посложнее.
zub писал(а):ну давайц, получи доступ хоть к чемунить железному в современной оси.
Может и стоит попробовать. Найду только справочник по прерываниям биоса. Впрочем, даже если не получится, то это ровным счетом ничего не значит -- в ассемблере я так до конца и не разобрался. Да и нужно это преимущественно при написании драйверов.
Лекс Айрин писал(а):Может и стоит попробовать. Найду только справочник по прерываниям биоса. Впрочем, даже если не получится, то это ровным счетом ничего не значит...
На самом деле многие прерывания будут нормально работать. Вот только в отличие от чистого MSDOS, это будет эмуляция на основе WinAPI. Заранее предупреждаю - лезть с прерываниями для видеокарт типа CGA или EGA не стоит, операционка будет изрядно удивлена...
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Vadim, да в курсе я. И даже не совсем эмуляция. Фактически, обработчики прерываний просто заменены Если честно, я не ожидал, что кто-то серьезно воспримет мои слова
Просто показал. что это желание немного странноватое. Чем более высокоуровневые функции, тем меньше точность таймера.
Логично. Уж эти точно переписаны.
Vadim писал(а):Заранее предупреждаю - лезть с прерываниями для видеокарт типа CGA или EGA не стоит, операционка будет изрядно удивлена...
Логично. Уж эти точно переписаны.
Лекс Айрин писал(а):Чем более высокоуровневые функции, тем меньше точность таймера.
Ну, милисекунды мне и не нужны. Функции тяжёлые и многоповторяющиеся, так что речь идёт о десятках и сотнях секунд...
Вы про какие прерывания? INT xxH чтоли? это никакой не прямой доступ, это просто способ вызвать соответствующую процедуру
Прямой доступ он через порты, и любая нормальная операционка сразу грохнет пользовательскую программу при таких попытках
Прямой доступ он через порты, и любая нормальная операционка сразу грохнет пользовательскую программу при таких попытках
