我有一个长期计划,FAA运行良好,直到FAA开始部署戴尔GX-760台式机。该计划是空中交通的图形重播。我使用QueryPerformanceFrequency函数来获取处理器计数器。使用GX 760时,它似乎与处理器无关。我发现这个http://msdn.microsoft.com/en-us/library/ms644904(VS.85).aspx描述了我所看到的。
在多处理器计算机上,它 无论哪个处理器都无所谓 调用。但是,你可以得到 不同的结果不同 处理器由于基本的错误 输入/输出系统(BIOS)或 硬件抽象层(HAL)。至 指定a的处理器关联 线程,使用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
答案 0 :(得分:2)
目前尚不清楚您遇到了什么样的问题。引用的MSDN文章不太可能非常,Dell Optiplex 760没有多个处理器。只有一个有多个核心,它不受这种错误的影响。您可以通过使用start.exe运行程序来轻松测试它,它允许设置处理器关联:
start / affinity 1 yourapp.exe
或许更相关的是,较新的机器在频率源上采用快捷方式,使用芯片组中可用的任何来源。对于QueryPerformanceFrequency,它们通常具有多更高的返回值。 20亿并不罕见,也许这会搞砸你的数学。使用'货币'而不是真正的64位整数是相当于脚趾卷曲。
同时检查您的机器的BIOS版本,它们的数量相当多,一直到A08。