Временной промежуток менее одной миллисекунды

london

Можно ли измерить таковой в Delphi? И вообще, возможно ли это под виндой? А если возможно, то как?

doc164

для винды есть intime extention
http://www.tenasys.com/

Dasar

Можно использовать HighPerformanceTimer - точность у него порядка нескольких микросекунд.
см. методы QueryPerformanceCounter/QueryPerformanceFrequency

koly

Ну замерять промежуток времени можно с помощью считывания регистра счетчика тактов процессора pentium. Я это делал, когда оптимизировал asm для P-1, вполне ничего работает.

koly

Можно еще вроде бы считывать значения из микросхемы таймера. В те годы она вроде бы работала с семизначной частотой - этого вполне достаточно.

psm-home

Как с помощью этих методов отмерить, скажем 500 мкс? Кусок кода, схематично, можно?

Dasar

Со 100% загрузкой процессора так:

long frequency;
QueryPerformanceFrequency(out frequency);
long start;
QueryPerformanceCounter(out start);
for (; ; )
{
long current;
QueryPerformanceCounter(out current);
double time = doublecurrent - start / frequency;
if (time >= 0.0005)
break;
}

Чтобы не было загрузки проца - надо в for вставить halt-ы

kamputer

лол?

nik93

чета помоему невтему....

bleyman

>> double time = doublecurrent - start / frequency
Лол, чувак. Нет, оно, конечно, будет работать, и даже, возможно, не очень сильно промахиваться. Но вообще правильнее поступать наоборот - вычислять long, соответствующий данному промежутку, а все сравнения делать уже с целочисленными значениями.

Dasar

> Но вообще правильнее поступать наоборот - вычислять long, соответствующий данному промежутку, а все сравнения делать уже с целочисленными значениями
я верил в вас, что вы справитесь с такой сложной задачей.
Оставить комментарий
Имя или ник:
Комментарий: