5

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

谢谢

4

2 回答 2

1

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

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

如果您在多处理器环境中,有关此功能的MSDN 文章还提示设置关联掩码。

于 2008-12-30T18:37:39.247 回答
1

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

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

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

如果您真的想等待优化时间,我建议您在有此类专家的游戏编程论坛之一上询问最佳方法。

于 2008-12-30T19:09:06.187 回答