我与FAA有一个长期的项目,在FAA开始部署戴尔GX-760台式机之前一直运行得很好。这个程序是空中交通的图形重播。我使用QueryPerformanceFrequency函数来获取处理器计数器。对于GX 760,它似乎不依赖处理器。我发现了这个http://msdn.microsoft.com/en-us/library/ms644904(VS.85).aspx,它破坏了我所看到的东西。
在多处理器计算机上,不应该管哪个处理器是被调用的。但是,由于基本输入/输出系统(BIOS)或硬件抽象层(HAL)中的错误,您可以在不同的处理器上得到不同的结果。若要指定线程的处理器关联,请使用SetThreadAffinityMask函数。
我不熟悉SetThreadAffinityMask,它是如何工作的,我应该如何实现它?这是我得到计数的代码。
谢谢,
戴夫
'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发布于 2010-11-21 13:50:25
现在还不清楚你遇到了什么样的问题。这是非常不可能被引用的MSDN文章是相关的,戴尔Optiplex 760没有多个处理器。只要有多个核,它就不受这种错误的影响。您可以很容易地通过使用start.exe运行程序来测试这一点,它允许设置处理器关联:
start /affinity 1 yourapp.exe
也许更相关的是,较新的机器使用频率源的快捷方式,使用芯片组中任何碰巧可用的源。对于QueryPerformanceFrequency,它们的返回值通常要高得多。二十亿不是不寻常的,也许这会搞砸你的数学。使用“货币”而不是一个真正的64位整数是相当靠不住的。
还检查您的计算机的BIOS修订,他们有相当多的,一直到A08。
https://stackoverflow.com/questions/4237872
复制相似问题