QueryPerformanceCounter和线程安全

时间:2008-12-30 18:29:55

标签: windows multithreading performancecounter

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

由于

2 个答案:

答案 0 :(得分:1)

这取决于您对QueryPerformanceCounter的参数所在的位置。如果它是两个线程之间的共享变量,那么它听起来不像该函数是线程安全的。

所以我建议每个帖子都有自己的LARGE_INTEGER来传递你对QPC的调用。每个调用都独立于另一个,并应适当更新相应的LARGE_INTEGER

如果您处于多处理器环境中,此函数的MSDN article也会提示setting an affinity mas k。

答案 1 :(得分:1)

  

我正在考虑重复   呼叫(旋转)到   QueryPerformanceCounter有两个线程   那将是同时活跃的。

OOG。想想你正在做什么以及有多少处理器可用。如果你有一个处理器,这将不起作用:它们不能“同时处于活动状态”,因为QueryPerformanceCounter不会产生从一个线程到另一个线程的控制。我相当确定win32中使用单处理器的线程切换具有大约1毫秒的时序粒度。

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

如果你真的想旋转等待优化计时,我建议你在其中一个有专家的游戏编程论坛上问最好的方法。

相关问题