2

我正在开发一个由三个主要软件组件组成的系统。客户端应用程序、核心应用程序和交换应用程序都运行在同一台服务器上。消息在客户端应用程序中接收,中继到核心应用程序,然后转发到适当的交换应用程序。

我想测量我们系统内部的消息延迟,因此在客户端收到消息时加上时间戳,在核心和消息从交换模块发出时的时间戳。

使用 QueryPerformanceCounter() 跨多个应用程序对事件进行计时是否合理?似乎计数器在运行多个内核的应用程序中不可靠。

4

2 回答 2

1

添加一个交换应用程序如何打开客户端连接,然后循环一个带有时间戳的消息,例如 10000 次。延迟会加起来,因此您可以有效地使用墙上时间戳,计算结束开始并除以 10000。

于 2013-04-11T15:13:07.720 回答
0

正如 Chad 指出的那样,QueryPerformanceCounter 可以很好地用于此目的。来自 MSDN “一般来说,[来自 QPC] 的性能计数器结果在多核和多处理器系统中的所有处理器上都是一致的,即使是在不同的线程或进程上测量时也是如此。”只提到了几个例外......

  1. 在某些处理器上运行的 Pre-vista 操作系统可能会违反这种一致性......
  2. 不同的线程可能会关闭 1 个刻度。“术语滴答指的是等于 1 ÷(从 QueryPerformanceFrequency 获得的性能计数器的频率)的时间段。”
于 2016-09-06T21:07:25.297 回答