Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  23:56[Войти] | [Зарегистрироваться]
Ответ на вопрос № 67074

07-12-2008 02:58
Насколько реально отсчитать кол-во пройденного время пока программа выполняет какую-то цепочку опереций?
Вот я например так делаю
var
_start,_end : real; \\ можно и TDateTime, смысл получает одинаковым как я заметил;

в каком-то месте программы пишу _start:=GetTime;
потом дальше по ходу её выполнения где-то еще написано
_end:=GetTime;
label1.caption:=FloatToStrF((_end-_start)/86400,ffFixed,30,10); от конечного время отнимаем начальное и делим на колво секунд в сутках (вроде их 86400). Так как как я понял GetTime считает время и от 00:00 до 23:59 меленно насчитывает единицу за сутки, поэтому (_end-_start)/86400 мне показалось правильным хотя не уверен на счет того как правильно посчитать в секунды. Ну и в результате получеатся примерно 0,0000000000... ну иногда 0,0000000001 или 0,0000000002. Это ж вобще ни что. Хотя программа в этом промежутки проходит около 800 строк. Может я что-то не то делаю? или не так

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

09-12-2008 18:14
закрыт, только мне хотелось бы узнать 15 мс это много для какого-то действия программы или нет
Смотря каких... Три волоса - много или мало? На голове - мало, в тарелке с супом - много.
Не зная, что именно делает программа, оценить разумное время выполнения - ну никак... :-))

09-12-2008 08:54 | Сообщение от автора вопроса
закрыт, только мне хотелось бы узнать 15 мс это много для какого-то действия программы или нет

08-12-2008 09:44
Можно лишь добавить самую малость к переводу в текстовой формат и обратно.
Там существует необязательный параметр типа TFormatSettings, который представляет из себя запись с 20 "вложениями".
Для того, чтобы правильно/красиво получить нужное значение, объявите переменную типа TFormatSettings
и измените нужные параетры "под себя" перед вызовом необходимой функции, куда и запишете эту переменную.
Например:

var FS: TFormatSettings;
...
fs.TimeSeparator:=':'//разделитель времени (часы:минуты:секунды)
fs.DecimalSeparator:=','//разделитель между целой и дробной частью
fs.CurrencyDecimals:=2//количество знаков в дробной части
fs.LongTimeFormat:='hh:mm:ss'//формат времени

FloatToStr(0.0208, FS);  //Результат: '0,02'
TimeToStr(0.020833333333, FS);  //Результат: '00:30:00'
...


Очень полезная вещь! Постоянно использую.

08-12-2008 09:19

Владимир так там и получается 15 и 16, просто функция FloatToStrF выводит так 15,000 и 16,000


Ну это уже частности... :-)
А вообще - решили проблему, вопрос закрыт ?

08-12-2008 07:38 | Сообщение от автора вопроса
Владимир так там и получается 15 и 16, просто функция FloatToStrF выводит так 15,000 и 16,000

08-12-2008 04:14
Если потребуется использовать более высокую точность времени, можно прибегнуть к WMI.

Что то вроде того:

function GetTimer: LongInt;
var t, f: Int64;
begin
  QueryPerformanceFrequency(f);
  QueryPerformanceCounter(t);
  Result:= Trunc(1000 * 1000 * t / f);
end;


07-12-2008 17:38 | Комментарий к предыдущим ответам
так результат получается 0,0000000 всегда нули. если не делить то 15,000 16,000
Значит, проверяйте деление. Боюсь ошибиться, но мне кажется, что если 15000 разделить на 1000, то
должно получиться 15. Может быть, все-таки не стоит пользоваться делением на 1000 в виде: (TEnd-TStart) div 1000,
потому что если время выполнения меньше секунды, то результат действительно равен нулю. Выводите время
(то есть разность "показаний" GetTickCount) прямо в миллисекундах, если для себя. Привыкнуть считать время
в миллисекундах не так уж сложно. :-)
Или T:=(TEnd-TStart)/1000, где T-вещественное число, если для пользователя, получите секунды с долями.
Вообще, чтобы было понятно - система предоставляет две функции: Now (текущее время и дата) - если надо знать текущее
время и/или дату, или же если надо измерять большие промежутки времени. Точнее, это не функция OS, это уже "обвертка" Dеlphi.
В качестве исходной используется функция API GetLocalTime. Или, как частный случай - в Delphi есть ф-ции
Date и Time (соответственно целая и дробная часть).
А вот если надо точно измерять относительно небольшие промежутки времени (т.е. нужна только разность времен между
началом и концом цепочки операций) - для этого Windows предоставляет ф-цию GetTickCount - количество миллисекунд
с момента запуска системы. Текущее время с помощью этой функции узнать нельзя, для этого она и не предназначена,
но интервалы времени меряет замечательно; так что пользуйтесь ею, что вам справедливо посоветовали и Mansiper,
и Сергей Рощин. Все-таки инструменты надо использовать по назначению. :-)

07-12-2008 13:09
от 0,015 до 0,036 насколько эти цифры реальны? Сейчас проверю по секундомеру :o)

07-12-2008 12:43 | Сообщение от автора вопроса
"Попробуйте использовать GetTickCount вместо GetTime и соответственно поменяйте тип на Cardinal. Разницу между окончанием и началом процессов делите целочисленно (DIV) на 1000 и получите количество секунд." так результат получается 0,0000000 всегда нули. если не делить то 15,000 16,000

а если делать как я делал только не делить на 86400, а умножать то получается от 0,015 до 0,036 насколько эти цифры реальны?

07-12-2008 10:23
Чтобы из суток получить секунды, надо не делить, а умножать на 86400. Используйте не GetTime, а NOW для получения даты и времени, иначе при переходе через 12 часов ночи будет отрицательное время.
Но лучше GetTickCount, а еще лучше см. http://www.delphikingdom.com/asp/viewitem.asp?catalogid=455 и комменты.

07-12-2008 05:02
var
  BeginTime: TTime;
begin
  BeginTime:= Time();
  try
    // <--- Здесь программа выполняет какую-то цепочку операций
  finally
    Label1.Caption:= 'Время выполнения: ' + TimeToStr(Time() - BeginTime);
  end;
end;

07-12-2008 04:13
Попробуйте использовать GetTickCount вместо GetTime и соответственно поменяйте тип на Cardinal. Разницу между окончанием и началом процессов делите целочисленно (DIV) на 1000 и получите количество секунд.

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Два кольца, два конца, посередине гвоздик.
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

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

    Яндекс цитирования