Сопоставьте отметку времени Wireshark с возвращаемым значением ::QueryPerformanceCounter

Я пытаюсь определить, сколько времени требуется сетевому пакету для перемещения от Wireshark (который, как я полагаю, довольно близок к аппаратному обеспечению) до точки в моем коде, в которой я вызываю ::QueryPerformanceCounter. Я фиксирую в Wireshark временную метку пришедшего пакета, но не знаю, как сравнить ее со значением, возвращаемым ::QueryPerformanceCounter.


person endian    schedule 14.12.2011    source источник
comment
Счетчики производительности — это просто постоянно увеличивающийся счетчик, который не может быть связан с отметкой времени.   -  person Some programmer dude    schedule 14.12.2011
comment
Возможно, это так, но WinPcap (библиотека, лежащая в основе Wireshark) использует QueryPerformanceCounter для определения временных меток, поэтому должен быть способ объединить результат QPC с другим значением для сравнения.   -  person endian    schedule 14.12.2011
comment
Возможно, вы могли бы взглянуть на исходный код WinPcap, чтобы увидеть, что именно он делает для получения метки времени, и сделать то же самое?   -  person NPE    schedule 14.12.2011


Ответы (1)


Вы можете вызвать QueryPerformanceFrequency, чтобы получить количество отсчетов в секунду. Это означает, что если у вас есть два показания счетчика, один, когда Wireshark получает пакет, а второй, когда пакет достигает вашего кода, вы можете вычесть их, чтобы получить количество счетчиков, а затем использовать частоту, чтобы получить продолжительность времени. Однако необработанное значение счетчика не имеет значения — оно имеет значение только по сравнению с другим значением этого счетчика.

person Puppy    schedule 14.12.2011
comment
Тактовая частота процессора может меняться, поэтому использовать ее в течение длительного периода времени ненадежно. - person Abyx; 14.12.2011
comment
Спасибо. Я не думаю, что смогу получить доступ к значению Wireshark/WinPcap для QueryPerformanceCounter. Отметка времени, которую он выдает, представляет собой количество секунд с 1970 года, за которым следует значение доли секунды, рассчитанное с помощью разницы QueryPerformanceCounter. Мне нужно будет подумать, могу ли я вычислить то же значение в своем коде. - person endian; 14.12.2011