首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SetThreadAffinityMask与QueryPerformanceFrequency结合使用?

如何将SetThreadAffinityMask与QueryPerformanceFrequency结合使用?
EN

Stack Overflow用户
提问于 2010-11-21 12:44:20
回答 1查看 860关注 0票数 1

我与FAA有一个长期的项目,在FAA开始部署戴尔GX-760台式机之前一直运行得很好。这个程序是空中交通的图形重播。我使用QueryPerformanceFrequency函数来获取处理器计数器。对于GX 760,它似乎不依赖处理器。我发现了这个http://msdn.microsoft.com/en-us/library/ms644904(VS.85).aspx,它破坏了我所看到的东西。

在多处理器计算机上,不应该管哪个处理器是被调用的。但是,由于基本输入/输出系统(BIOS)或硬件抽象层(HAL)中的错误,您可以在不同的处理器上得到不同的结果。若要指定线程的处理器关联,请使用SetThreadAffinityMask函数。

我不熟悉SetThreadAffinityMask,它是如何工作的,我应该如何实现它?这是我得到计数的代码。

谢谢,

戴夫

代码语言:javascript
复制
'Declarations
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long

'I set the Frequency on Startup
cTime.SetFrequency

Public Sub SetFrequency()
'Get the Processor Frequency.  This is locked at Windows startup and does n
Dim f As Currency
    QueryPerformanceFrequency f
    cTime.Frequency = f

End Sub


When the program needs the time it calls 

Public Function CurrentCount() As Currency
'What is the current processoer count
    QueryPerformanceCounter CurrentCount 'get current count number
End Function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-21 13:50:25

现在还不清楚你遇到了什么样的问题。这是非常不可能被引用的MSDN文章是相关的,戴尔Optiplex 760没有多个处理器。只要有多个核,它就不受这种错误的影响。您可以很容易地通过使用start.exe运行程序来测试这一点,它允许设置处理器关联:

start /affinity 1 yourapp.exe

也许更相关的是,较新的机器使用频率源的快捷方式,使用芯片组中任何碰巧可用的源。对于QueryPerformanceFrequency,它们的返回值通常要高得多。二十亿不是不寻常的,也许这会搞砸你的数学。使用“货币”而不是一个真正的64位整数是相当靠不住的。

还检查您的计算机的BIOS修订,他们有相当多的,一直到A08。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4237872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档