C++ 测量延迟的计时器
在通过TCP测量任何协议中的网络延迟(收到ack的时间-发送msg的时间)时,您建议使用什么计时器?为什么?它有什么决议?还有哪些优点/缺点 可选:它是如何工作的 可选:您不使用什么定时器,为什么 <>我主要是在寻找Windows /C++解决方案,但是如果您想对其他系统进行评论,请随意这样做。C++ 测量延迟的计时器,c++,winapi,timer,latency,C++,Winapi,Timer,Latency,在通过TCP测量任何协议中的网络延迟(收到ack的时间-发送msg的时间)时,您建议使用什么计时器?为什么?它有什么决议?还有哪些优点/缺点 可选:它是如何工作的 可选:您不使用什么定时器,为什么 我主要是在寻找Windows /C++解决方案,但是如果您想对其他系统进行评论,请随意这样做。 (目前我们使用GetTickCount(),但它不是一个非常精确的计时器。)您提到使用GetTickCount(),因此我建议您查看QueryPerformanceCounter()。这是我的答案的副本,来
(目前我们使用GetTickCount(),但它不是一个非常精确的计时器。)您提到使用GetTickCount(),因此我建议您查看QueryPerformanceCounter()。这是我的答案的副本,来自: 对于要使用的Linux(和BSD)
#包括
int main()
{
timespects;
//clock_gettime(clock_MONOTONIC,&ts);//适用于FreeBSD
clock_gettime(clock_REALTIME,&ts);//在Linux上工作
}
对于要使用的windows。这里有更多关于
显然,某些芯片组上存在已知的QPC问题,因此您可能希望确保没有这些芯片组。此外,一些双核AMD也可能导致故障。见Sebbi的第二篇文章,他在文章中指出:
QueryPerformanceCounter()和
QueryPerformanceFrequency()提供一个
分辨率稍高,但有
不同的问题。例如在
Windows XP,所有AMD Athlon X2双
核心CPU返回以下任意一个的PC
内核“随机”(有时在PC上)
向后跳一点),除非你
专门安装AMD双核驱动程序
包来修复该问题。我们没有
注意到任何其他双核CPU吗
有类似问题(p4双,p4 ht,
core2 dual、core2 quad、phenom quad)
rdtsc指令真的没有替代品。您无法确定QueryPerformanceCounter将支持何种分辨率。有些具有非常大的粒度(较低的增量率/频率),有些则完全不返回任何内容 相反,我建议您使用rdtsc指令。它不需要任何操作系统实现,并返回自计算机/处理器/内核通电以来经过的CPU内部时钟周期数。对于每秒递增30亿次的3GHz处理器来说,没有比这更精确的了,是吗?此指令适用于以奔腾或奔腾MMX开头的x86-32和-64。因此,它也应该可以从x86 Linux访问 stackoverflow.com上有很多关于它的帖子。我自己也写了一些
#include <sys/time.h>
int main()
{
timespec ts;
// clock_gettime(CLOCK_MONOTONIC, &ts); // Works on FreeBSD
clock_gettime(CLOCK_REALTIME, &ts); // Works on Linux
}