QueryPerformanceCounter和线程安全

我正在考虑在两个同时处于活动状态的线程中对QueryPerformanceCounter进行重复调用(旋转)。 我不知道这是否真的是一个问题,因为我没有看到有关它的任何东西,但是QueryPerformanceCounter线程安全吗?

谢谢

这取决于您的参数QueryPerformanceCounter居住的地方。 如果它是两个线程之间的共享变量,那么听起来不像函数是线程安全的。

因此,我建议每个线程都有自己的LARGE_INTEGER传递给QPC的调用。 每个调用都独立于另一个,并且应该适当地更新相应的LARGE_INTEGER

如果您处于多处理器环境中, MSDN上关于此功能的文章也会提示您设置亲和性 。

我正在考虑在两个同时处于活动状态的线程中对QueryPerformanceCounter进行重复调用(旋转)。

OOG。 想想你在做什么,有多少处理器可用。 如果您有一个处理器,这将无法工作:它们不能同时处于“活动状态”,因为QueryPerformanceCounter不会从一个线程控制到另一个线程。 我相当确信,在单处理器win32中的线程切换具有约1毫秒量级的时间粒度。

如果你有多个处理器,你可能会得到不好的结果(理论上 – 我没有一个多处理器的个人电脑,所以没有观察到这一点)。 QPC的更多有趣的讨论可以在互联网上找到(例如见Raymond Chen的博客)

如果你真的想旋转等待优化时间,我建议你问在这样的事情有专家的游戏编程论坛上这样做的最好方法。