Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вычислить разницу во времени [D7, WinXP]


Draught ©   (2005-08-31 17:44:00) 

Всем доброго времени суток...
Вроде задача простая - перед выполнением процедуры запомнить время, после выполнения запомнить, затем подсчитать разницу и показать результат, одно НО, хотелось бы точность не до секунды получить, а еще 3 знака после секунды.
Пробовал покрутить с двумя переменными

var start_time,stop_time:int64
...
begin
...
start_time:=GetCurrentTime;
while ...;
stop_time:=GetCurrentTime;
...
Showmessage(IntToStr(Start_time-stop_time)+' times');
...
end;


в итоге получаю просто число "1547"- его можно каким-нибудь образом представить в виде часов, минут, секунд и миллисекунд?


menart   (2005-08-31 19:56:00) [1]

Извеняюсь

var
d:TDateTime;
begin
d:=now;

...

showmessage(formatDateTime('hh:mm:ss: zzz',(now-d)));


menart   (2005-08-31 19:41:00) [2]

var
 d:TDateTime;
begin
d:=now;

...

showmessage(formatDateTime('hh:mm:ss:ms',(now-d)));


menart   (2005-08-31 19:41:00) [3]

var
 d:TDateTime;
begin
d:=now;

...

showmessage(formatDateTime('hh:mm:ss:ms',(now-d)));


Draught   (2005-08-31 19:29:00) [4]

всем спасибо...
в итоге все-таки пришлось делать так:


hour:=((stop_time-start_time) div (3600 * 999)) mod 24;
min:=((stop_time-start_time) div (60 * 999)) mod 60;
sec:=((stop_time-start_time) div 999) mod 60;
mlsec:=(stop_time-start_time) mod 999;


WST   (2005-08-31 19:18:00) [5]

d := round((ss / 86400)-0.5);
 h := round((ss / 3600)-0.5)-d*86400;
 m := round((ss / 60)-0.5)-((d*86400)+(h*60));
 s := round(ss-((d*86400)+(h*3600)+(m*60)));

по очереди - d - дней, h - часов, m - минут, s - секунд, ss - твои полученние цифры путем ss := GetTickCount;

Вроде так. Enjoy!


Jeer   (2005-08-31 18:58:00) [6]

Reindeer Moss Eater ©   (31.08.05 17:45) [1]

Квант - 10-20 ms
Человек хочет три знака после секунды, т.е. 1 ms.

QueryPerformanceCounter
RDTSC


Fay   (2005-08-31 18:47:00) [7]

Antonn ©   (31.08.05 18:14) [5]
zzz


Antonn   (2005-08-31 18:14:00) [8]

formatdatetime('hh:nn:ss:zzzz', now)


Reindeer Moss Eater   (2005-08-31 18:01:00) [9]

миллилитр = одна тысясная литра.
миллисекунда - одна тысячная секунды.


Draught   (2005-08-31 17:59:00) [10]

Хорошо, как вычислять милисекунды я понял, GetCurrentTime тоже неплохо справлялся с этим :)

Как теперь перевести число в часы, минуты, секунды и милисекунды??? Есть такая функция в делфи??? Или ее нужно самому создавать???


Draught   (2005-08-31 17:46:00) [11]

ошибся немного...

showmessage(IntToStr(Stop_time-start_time)+' times')


Reindeer Moss Eater   (2005-08-31 17:45:00) [12]

GetTickCount + F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо