C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Высокоточный таймер, QueryPerfomanceFrequency
Roman
Отправлено: 15.07.2004, 09:51


Дежурный стрелочник

Группа: Участник
Сообщений: 78



Привет всем!
Вопрос в следующем: Мне нужен высокоточный таймер (мкс). Нашел что этого можно добиться двумя функциями:
- QueryPerfomanceFrequency() возвращает частоту тиков, количество тиков в секунду
- QueryPerfomanceCounter() возвращает просто количество тиков, работать надо примерно так:

double dur;
LARGE_INTEGER freq, begin, end;
QueryPerfomanceFrequency(&freq);
QueryPerfomanceCounter(&begin);
//...
//Что то делаем
//...
QueryPerfomanceCounter(&end);
dur=((double)(end — begin))/freq;
//В итоге в dur у тебя получится сколько секунд у тебя это что-то выполнялось

а компилятор говорит что такая функция не определена

sad.gif

... и их нет ни в одном заголовочном файле...

Где они определены?
AVC
Отправлено: 15.07.2004, 10:04


Ветеран

Группа: Модератор
Сообщений: 1583



Насколько высокоточный? Все равно точнее чем системные часы без ухищрений или доп. оборудования время не замеряете.
Может попробовать так:
CODE

TDateTime tbeg = Now();
// что то делаем
double d = double(Now() — tbeg) * (24*60*60); // Интервал в секундах

Дает приемлимый результат до сотен милисекунд.

PS.
В Dos'е было: частота тиков 18.2 гц, до системного счетчика тиков можно было достучаться по адресу 0x046C (int32)

Отредактировано AVC — 15/07/2004, 10:14
S A T O R I
Отправлено: 15.07.2004, 10:10


Ученик-кочегар

Группа: Участник
Сообщений: 8



Рома ? Это ты чтоли ?
Roman
Отправлено: 15.07.2004, 10:45


Дежурный стрелочник

Группа: Участник
Сообщений: 78



Нужны микросекунды...
С помощью этих функций можно добиться требуемой точности, т.к. привязывается к тикам процессора (со всеми вытекающими последствиями)
wink.gif

Ну так как?
Asher
Отправлено: 15.07.2004, 10:55


Мастер участка

Группа: Модератор
Сообщений: 550



BOOL QueryPerformanceCounter
Roman
Отправлено: 15.07.2004, 11:04


Дежурный стрелочник

Группа: Участник
Сообщений: 78



Не понял sad.gif
Asher
Отправлено: 15.07.2004, 11:07


Мастер участка

Группа: Модератор
Сообщений: 550



букву r ты пропустил в названии. я тебе ее жирным выделил.
определена в winbase.h

Должна быть уже подключена для win32 программ

Отредактировано Asher — 15/07/2004, 13:10
AVC
Отправлено: 15.07.2004, 11:15


Ветеран

Группа: Модератор
Сообщений: 1583



DWORD GetTickCount();
Позволяет определять временной интервал с точностью до 1мс (системный таймер тикает с частотой 1кГц).

Неужели QueryPerformanceCounter заставлят систему тикать чаще? Или они управляют другим каналом таймера? Или на базе чего она измеряет интервалы?

Отредактировано AVC — 15/07/2004, 11:18
Roman
Отправлено: 15.07.2004, 11:40


Дежурный стрелочник

Группа: Участник
Сообщений: 78



Asher — Огромное спасибо!!!!! smile.gif

Я пол дня потерял. Вывод — Не верь информации из одного источника и проверяй файлы "в ручную".

AVC
Это не QueryPerformanceCounter заставлят систему тикать чаще, а само железо тикает чаще и мы к нему подцепляемся....
AVC
Отправлено: 15.07.2004, 11:50


Ветеран

Группа: Модератор
Сообщений: 1583



Спасибо. Возьму на вооружение. А то по старинке деDos'овскими методами замерял. smile.gif

Отредактировано AVC — 15/07/2004, 12:41
Roman
Отправлено: 15.07.2004, 12:20


Дежурный стрелочник

Группа: Участник
Сообщений: 78



AVC
Насчет твоего предположения не знаю, но для своего P4 2,6 ГГц я с помощью QueryPerfomanceFrequency() получил 2598810000 тиков. Кстати, задержка выполнения этой функции 1400-1500 тиков (сам не проверял) smile.gif

Теперь проверил — на два захвата (друг за другом) примерно 5500-6700 тиков (колеблется)

Отредактировано Roman — 15/07/2004, 14:57
Boyko
Отправлено: 15.07.2004, 13:36


Станционный диспетчер

Группа: Участник
Сообщений: 88



QUOTE (Roman @ 15/07/2004, 12:42)
Я пол дня потерял. Вывод — Не верь информации из одного источника и проверяй файлы "в ручную".

Разве у тебя нет Find in Files... wink.gif
Roman
Отправлено: 15.07.2004, 13:50


Дежурный стрелочник

Группа: Участник
Сообщений: 78



Он искал полное совпадение cool.gif

Вернуться в Вопросы программирования в C++Builder