Реализация примера __cpuid из MSDN дает безумно большие числа

Я быстро реализую этот код http://msdn.microsoft.com/en-us/library/hskdteyh(v=vs.80).aspx в мою программу, так как мне нужно было получить некоторую информацию о процессоре, однако, когда я доберусь до этой части кода:

__cpuid(CPUInfo, 0x80000000);
    nExIds = CPUInfo[0];

следующий цикл for начинает выполняться бесконечно, поэтому я поставил точку останова, и количество обращений продолжало расти, оказалось, что для nExIDs устанавливается значение 2147483656, что делает выполнение остальной части кода часы, если не недели (так что это, очевидно, ошибка). Он не говорит, что функция устарела или что-то в этом роде, так что это не должно доставлять мне проблем, верно? Если это имеет отношение к *__cpuid* функция, я запускаю ее на 64-разрядной версии Windows 7 Home Premium на ноутбуке VAIO. ЦП, который я запрашиваю, является Intel(R) Core (TM) i5 CPU M 460 @ 2,53 ГГц с 2 ядрами (4 логических). Возможно, мне нужно передать другое значение, отличное от 0x80000000? Но как определить, сколько?


person ulak blade    schedule 27.03.2013    source источник
comment
Если вы опубликуете код, который используете, мы сможем помочь.   -  person Rich    schedule 28.03.2013
comment
Работали ли какие-либо другие инфо-типы, задокументированные на этой странице? Что они вернули?   -  person Robert Harvey    schedule 28.03.2013
comment
@Rich: Это на странице, на которую он ссылается. Конечно, нет никакой гарантии, что он не содержит ошибок.   -  person Robert Harvey    schedule 28.03.2013
comment
Спасибо, @RobertHarvey пришлось немного прокрутить, чтобы найти   -  person Rich    schedule 28.03.2013
comment
Да, другие работали, я использую точный источник страницы, если я заставлю ее работать оттуда, я подправлю ее и т. д., но даже та, что из msdn, похоже, не работает (по крайней мере, для меня).   -  person ulak blade    schedule 28.03.2013
comment
хм, в этой строке значение CPUInfo[0] равно 1, но nExIds устанавливается на огромное число (и число меняется каждый раз, когда оно выполняется). Я фактически устанавливаю nExIds на 0 в предыдущей строке и проверяю значение CPUInfo[0], и он по-прежнему становится недопустимым числом.   -  person ulak blade    schedule 28.03.2013
comment
Вы читали эту часть страницы, на которую вы ссылаетесь? Если это поддерживается, значения InfoType из 0x8000000 могут использоваться для возврата информации. Чтобы определить максимально допустимое значимое значение, задайте для InfoType значение 0x8000000.   -  person brian beuning    schedule 28.03.2013
comment
nFeatureInfo = CPUInfo[3] также устанавливает недопустимое значение.   -  person ulak blade    schedule 28.03.2013


Ответы (1)


Хорошо, я понял, в примере в MSDN есть ошибка: если функция не поддерживается, она устанавливает отрицательное значение, но nExIds является беззнаковым int, поэтому, когда вы устанавливаете отрицательное недопустимое значение, оно автоматически устанавливается на 2147483656. Поэтому я должен использовать int вместо unsigned int .

person ulak blade    schedule 28.03.2013