C GetTickCount (функция Windows) для времени (наносекунды) - PullRequest
2 голосов
/ 24 сентября 2010

Я тестирую один код, предоставленный моим коллегой, и мне нужно измерить время выполнения одной подпрограммы, которая выполняет переключение контекста (потоков).

Какой самый лучший выбор для измерения времени? Я знаю, что доступны таймеры высокого разрешения, например,

QueryPerformanceCounter
QueryPerformanceFrequency

но как я могу использовать эти таймеры для перевода в миллисекунды или наносекунды?

Ответы [ 2 ]

3 голосов
/ 24 сентября 2010
LARGE_INTEGER lFreq, lStart;
LARGE_INTEGER lEnd;
double d;

QueryPerformanceFrequency(&lFreq);
QueryPerformanceCounter(&lStart);

/* do something ... */

QueryPerformanceCounter(&lEnd);
d = ((doublel)End.QuadPart - (doublel)lStart.QuadPart) / (doublel)lFreq.QuadPart;

d - временной интервал в секундах.

1 голос
/ 01 октября 2010

Поскольку операция, которую я выполняю, имеет порядок 500 нано, а таймеры не имеют точности, то, что я сделал, было

я сохранил фактическое время с помощью GetTickCount () - (использует точность ~ 12 миллионов) и выполняет выполнение маршрута N_TIMES (количество выполнений подпрограммы), которое остается до тех пор, пока я не нажму что-либо на консоли.

Рассчитайте время еще раз и сделайте разницу, разделив на N_TIMES, что-то вроде этого:

int статический счетчик;

void рутина () { // Операции здесь .. Счетчик ++; } * +1010 *

int main () {
start <- GetTickCount (); handle <- createThread (....., рутина, ...); <br> ResumeThread (ручка);

getchar();

WaitForSingleObject (handle, INFINITE);

Elapsed = (GetTickCount () - начало) * 1000000.0) / counter; printf ("Нанос:% d", истек); }

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...