Daisy |
Отправлено: 12.10.2005, 15:55 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 36
|
Нужно измерить время в миллисекундах между двумя событиями.
Есть такой метод: MilliSecondsBetween
Как им пользоваться? Не могу понять.
Или можно как то по-другому?
Отредактировано Daisy — 12/10/2005, 15:56 |
|
Doga |
Отправлено: 12.10.2005, 16:18 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
QueryPerformanceFrequency & QueryPerformanceCounter
|
|
Daisy |
Отправлено: 12.10.2005, 16:32 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 36
|
QUOTE (Doga @ 12/10/2005, 16:18) | QueryPerformanceFrequency & QueryPerformanceCounter |
А это где брать?
Ткните носом в пример, пожалуйста. |
|
Asher |
Отправлено: 12.10.2005, 16:34 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
Для миллисекунд вполне достаточно GetTickCount
|
|
Daisy |
Отправлено: 12.10.2005, 16:51 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 36
|
QUOTE (Asher @ 12/10/2005, 16:34) | Привет.
Для миллисекунд вполне достаточно GetTickCount |
Привет.
А точность у него вроде не очень? 15 мс, плюс минус. Или может это виндовс своими делами там занимается?
Я гоняю байты по нульмодемному кабелю, подцепленному к двум COM-ам одного PC, завержка с GetTickCount получается то 0мс, а то 15-16 мс.
Правда, такой вариант:
TDateTime beg;
TDateTime end;
....
beg = Now();
beg.DecodeTime(&hour1, &min1, &sec1, &msec1);
...
end = Now();
end.DecodeTime(&hour2, &min2, &sec2, &msec2);
дает тот же результат. |
|
gvg |
Отправлено: 12.10.2005, 17:09 |
|
Машинист паровоза
Группа: Участник
Сообщений: 222
|
CODE |
bool __fastcall DelayTest()
{
LARGE_INTEGER freq;
return( QueryPerformanceFrequency( &freq ) || freq.QuadPart < 1000 );
}
//---------------------------------------------------------------------------
void __fastcall Delay( int ms )
{
LARGE_INTEGER freq, counter;
__int64 diff, prev;
QueryPerformanceFrequency( &freq );
diff = freq.QuadPart / 1000;
QueryPerformanceCounter( &counter );
prev = counter.QuadPart;
for( int i = 0; i < ms; i++ )
{
if( i )
Application->ProcessMessages();
for(;;)
{
QueryPerformanceCounter( &counter );
if( counter.QuadPart — prev >= diff )
break;
}
prev = counter.QuadPart;
}
}
| |
|