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

 
Время в миллисекундах между двумя событиями, Как измерить?
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;
 }
}

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