C++ 跟踪函数在最后一分钟内被调用的次数的有效方法是什么?

C++ 跟踪函数在最后一分钟内被调用的次数的有效方法是什么?,c++,usage-statistics,C++,Usage Statistics,我正在寻找一种方法来跟踪函数在最后一分钟内被调用的次数 每秒钟,我都想知道在过去60秒内函数被调用了多少次。做这件事的有效方法是什么 我考虑使用几个线程和一个时间戳向量。每次在第一个线程中调用函数时,都会向向量中添加一个时间戳项。另一个线程监视向量的结尾,并在向量超过60秒时删除最后一项。第三个线程将每秒检查向量的大小 然而,这似乎是低效的。跟踪此值的更好方法是什么?我不明白为什么需要第三个线程。当第二个线程删除所有比当前时间(60秒)早的条目时,为什么处理完后它不能报告大小?实际上,当监视函数

我正在寻找一种方法来跟踪函数在最后一分钟内被调用的次数

每秒钟,我都想知道在过去60秒内函数被调用了多少次。做这件事的有效方法是什么

我考虑使用几个线程和一个时间戳向量。每次在第一个线程中调用函数时,都会向向量中添加一个时间戳项。另一个线程监视向量的结尾,并在向量超过60秒时删除最后一项。第三个线程将每秒检查向量的大小


然而,这似乎是低效的。跟踪此值的更好方法是什么?

我不明白为什么需要第三个线程。当第二个线程删除所有比当前时间(60秒)早的条目时,为什么处理完后它不能报告大小?实际上,当监视函数添加一个新条目时,它可以直接在之后清理旧条目,并在完成后报告向量的大小。因此,即使没有任何额外的线程,这也可以工作。(我在任何额外的线程中都看到了潜在的问题源。因此,只要没有紧急原因,我就会尝试阻止多线程。可能是,我有点偏执……;-)您是否关心最近1000毫秒内调用此函数的次数;无论时间是什么,或者您是否关心每个1000ms块中调用此函数的次数?后者更容易做到,而且在大多数情况下都一样好。@UKMonkey我更关心的是最后1000毫秒的滚动总数。是的,1000毫秒的块比较容易,但是如果滚动总数达到很高,我需要能够快速反应(在~10毫秒范围内)。@Scheff你说得对,我可以减少线程数。我在第一个线程中跟踪的函数调用非常频繁,所以我考虑尽量减少其中的工作量。仔细考虑后,在主线程中执行所有操作都不应该增加太多开销。也许您可以保存一个调用的柱状图,以毫秒为单位保存调用数。然后,跟踪该值只需要对直方图求和。复杂的部分是清除垃圾箱,但这可以通过“记住”上一次函数调用的时间点,并在“触摸”直方图时进行更新来实现。