Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Секундомер, как правильно сосчитать время 
V
    Опции темы
MacTep
Дата 5.3.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Нужно реализовать секундомер с точностью до сотых секунды. А вот как это сделать, не пойму. При помощи обыкновенного таймера не получается, как-то странно он тормозит. Какие есть предложения по этому вопросу?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Albinos_x
Дата 5.3.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



вопрос неоднакратно поднимался пользуемся поиском....
кроме того этот вопрос ели не ошибаюсь освещён в DRKB...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
SoWa
Дата 5.3.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



GetTickCount- им и пользуйся.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
MacTep
Дата 5.3.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Цитата(SoWa @ 5.3.2006, 20:36 Найти цитируемый пост)
GetTickCount- им и пользуйся.
Пользуюсь... Но ведь при проверке того, сколько уже времени прошло, нужно сверяться с таймером. А таймер сильно отстает или неправильно идет вообще. Можно пример... В DRKB такой статьи я не нашел.



--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Albinos_x
Дата 6.3.2006, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(SoWa @ 5.3.2006, 20:36 Найти цитируемый пост)
GetTickCount- им и пользуйся.

как я понял человек хочет сделать собственный таймер...
---------
ну так создай отдельный поток и в нем проверяй GetTickCount, например:
Код

...
procedure Execute;
var t:Int64;
begin
t:=GetTickCount;
while GetTickCount>=(t+TimeOut) do  // TimeOut считаю за свойство потока, типа MyThead.TimeOut:Integer;
   begin
   t:=GetTickCount;
   // здесь твои операции
   end;
end;
...



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Sunvas
Дата 12.3.2006, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Кстати, также в потоке можно функцию в While-ом, а в ней пользоваться процедурой Sleep. Как показывает практика, этот метод один из самый точных.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
former
Дата 12.3.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Для начала описываешь процедуру, которая будет вызываться по сообщению от таймера :

Код

procedure FNTimeCallBack(uTimerID, uMessage: UINT;
dwUser, dw1, dw2: DWORD); stdcall;
begin
  // Тело процедуры.
end;


а дальше в программе (например по нажатию кнопки) создаешь Таймер и вешаешь на него созданную процедуру

Код

uTimerID:=timeSetEvent(10,500,@FNTimeCallBack,100,TIME_PERIODIC); 


Подробности смотри в Help. Hу и в конце убиваешь таймер
Код

timeKillEvent(uTimerID); 



И все. Точность этого способа до 1 мсек. минимальный интервал времени можно задавать 1 мсек.

Обрати внимание на то, что все CALLBACK-функции, вызываемые Windows, должны использовать соглашение о вызовах stdcall.



--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
MacTep
Дата 13.3.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



На torry.net нашел кучу полезных компонентов для работы со временем. Сразу проблема исчезла сама собой. Спасибо за обсуждение! smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.