2010-11-21 3 views
1

У меня есть давняя программа с FAA, которая отлично работает, пока FAA не приступит к развертыванию настольных компьютеров Dell GX-760. Программа представляет собой графическое воспроизведение воздушного движения. Я использую функцию QueryPerformanceFrequency для получения счетчика процессора. С GX 760 он не зависит от процессора. Я нашел это http://msdn.microsoft.com/en-us/library/ms644904(VS.85).aspx, который описывает то, что я вижу.Как вы используете SetThreadAffinityMask с QueryPerformanceFrequency?

На многопроцессорной ЭВМ, он не имеет значения, какой процессор называется. Тем не менее, вы можете получить различные результаты по разным процессорам из-за ошибок в базовой системе ввода-вывода (BIOS) или уровне абстракции аппаратного обеспечения (HAL) . В укажите сродство процессора к потоку , используйте функцию SetThreadAffinityMask .

Я не знаком с SetThreadAffinityMask, как это работает и как его реализовать? Вот мой код, который получает счет.

Спасибо,

Dave

'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 

ответ

2

Это не совсем ясно, какие проблемы вы испытываете. Это очень маловероятно, что цитированная статья MSDN актуальна, Dell Optiplex 760 не имеет нескольких процессоров. Только один с несколькими ядрами, он не подвержен подобным ошибкам. Вы можете легко проверить это, запустив программу с start.exe, это позволяет установить соответствие процессоров:

старта/сродство 1 yourapp.exe

Возможно, более актуальным является то, что новые машины принимают ярлыки на частотном источнике, используя любой источник, доступный в чипсете. Как правило, у них есть больше более высокое возвращаемое значение для QueryPerformanceFrequency. Два миллиарда не являются чем-то необычным, возможно, это затмевает вашу математику. Работа с «валютой» вместо истинного 64-битного целого является скорее зависанием.

Также проверьте версию BIOS для вашего компьютера, у них было довольно большое количество из них, вплоть до A08.

+0

Вы ошибаетесь, у меня были некоторые игры, которые я сделал, которые опирались на крах QPC при выполнении математики физики из-за их смещения между ядрами (не процессорами) и QPC, возвращающих другое значение. В документации Microsoft для QPC имеется несколько ошибок или вводящая в заблуждение информация. – speeder

Смежные вопросы