Как вы используете SetThreadAffinityMask с QueryPerformanceFrequency? - PullRequest
1 голос
/ 21 ноября 2010

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

На многопроцессорном компьютере это не должно иметь значения, какой процессор называется. Тем не менее, вы можете получить разные результаты на разных процессоры из-за ошибок в основном система ввода / вывода (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

1 Ответ

2 голосов
/ 21 ноября 2010

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

start / affinity 1 yourapp.exe

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...