Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Количество процессоров в ПК

Автор: el Fighter
Дата сообщения: 25.10.2005 15:44
Доброго времени суток.

вот столкнулся с проблемой - нужно любым программным способом узнать количество процессоров в системе - 1 или 2. или хотя бы вестку реестра, где хранится об этом информация.

плиз хелп
Автор: MoKC0DeR
Дата сообщения: 25.10.2005 16:26
http://www.intel.com/cd/ids/developer/asmo-na/eng/200678.htm?page=1
Автор: WiseAlex
Дата сообщения: 26.10.2005 19:26
el Fighter
WinAPI:
GetSystemInfo

Автор: DroN_S
Дата сообщения: 26.10.2005 19:45
el Fighter
Количество процессов в системе:

Код:
procedure ListProcesses;
var
hSnapShot: THandle;
lppe: TProcessEntry32;
hIcon: THandle;
Count: Integer;

procedure _FillList;
begin
with Form1.ListView1.Items.Add, lppe do
begin
hIcon:= ExtractIcon(hInstance, lppe.szExeFile, 0);
if hIcon = 0 then
hIcon:= LoadImage(0, IDI_WINLOGO, IMAGE_ICON, LR_DEFAULTSIZE,
LR_DEFAULTSIZE, LR_DEFAULTSIZE or LR_DEFAULTCOLOR or LR_SHARED);
ImageIndex:= ImageList_AddIcon(Form1.ImageList1.Handle, hIcon);
Caption:= ExtractFileName(szExeFile);
SubItems.Add(Format('$%x', [Th32ProcessID]));
SubItems.Add(Format('$%x', [Th32ParentProcessID]));
case pcPriClassBase of
4: SubItems.Add(Format('%d (Idle)', [pcPriClassBase]));
8: SubItems.Add(Format('%d (Norm)', [pcPriClassBase]));
13: SubItems.Add(Format('%d (High)', [pcPriClassBase]));
24: SubItems.Add(Format('%d (Real)', [pcPriClassBase]));
else SubItems.Add(Format('%d', [pcPriClassBase]));
end;
SubItems.Add(Format('%d', [cntThreads]));
SubItems.Add(Format('%d', [cntUsage]));
SubItems.Add(szExeFile);
end;
Inc(Count);
end;

begin
hSnapShot:= CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnapShot <> INVALID_HANDLE_VALUE then
begin
Form1.ListView1.Items.Clear;
lppe.dwSize:= SizeOf(lppe);
Count:= 0;
if Process32First(hSnapShot, lppe) then _FillList;
while Process32Next(hSnapShot, lppe) do _FillList;
Form1.StatusBar1.Panels[1].Text:= 'Total: ' + IntToStr(Count);
CloseHandle(hSnapShot);
end
else MessageBox(Form1.Handle, 'Internal error', 'Error', MB_OK or MB_ICONERROR);
end;
Автор: ShIvADeSt
Дата сообщения: 27.10.2005 00:51
DroN_S

Цитата:
Количество процессов в системе:

Внимательно читаем вопрос

Цитата:
вот столкнулся с проблемой - нужно любым программным способом узнать количество процессоров в системе - 1 или 2

Процессор - это такая комплектующая на материнской плате
WiseAlex
Интересно, а мультиядерные процессоры будут как один или как 2 считаться? Просто не могу проверить это сам, нет таких под рукой.
Автор: f_serg
Дата сообщения: 27.10.2005 06:54
ShIvADeSt

Цитата:
а мультиядерные процессоры будут как один или как 2 считаться?

Скорее всего как 2. Во всяком случае, на одном P4 HT GetSystemInfo() говорит, что два процессора.
Автор: el Fighter
Дата сообщения: 27.10.2005 12:58
ShIvADeSt

на счет открыть корпус и посмотреть - это курто

а серьёзно - рабочая ситуация - в сети 1500 кампов, ставлю UNIGRAPHICSNX2. в нем есть поддержка 2х процуессоров. но она должна включаться ТОЛЬКО если 2 процессора.
поэтому мне нужна программа, которая сперва проверяет сколько процессоров есть в системе, а затем на основании полученных результатов на автомате меняет файлик конфигурации....

мне даже пойдет какая нить функция, которая возвращает бувально "1" или "2" процессора в системе, даже не важен их тип и все модификации....

Добавлено:
Вот нашел. Может быть кому то будет полезно:

Получение информации о железе.

Приведённый пример использует функцию GetSystemInfo и позволяет узнать OEM идентификатор, тип процессора, размер страницы и т.д. Пример является консольным приложением.



#include <windows.h>
#include <stdio.h>

void main()
{
SYSTEM_INFO siSysInfo;

// Копируем информацию о железе в структуру SYSTEM_INFO.

GetSystemInfo(&siSysInfo);

// Отображаем содержимое структуры SYSTEM_INFO.

printf("Hardware information: \n");
printf(" OEM ID: %u\n", siSysInfo.dwOemId);
printf(" Number of processors: %u\n",
siSysInfo.dwNumberOfProcessors);
printf(" Page size: %u\n", siSysInfo.dwPageSize);
printf(" Processor type: %u\n", siSysInfo.dwProcessorType);
printf(" Minimum application address: %lx\n",
siSysInfo.lpMinimumApplicationAddress);
printf(" Maximum application address: %lx\n",
siSysInfo.lpMaximumApplicationAddress);
printf(" Active processor mask: %u\n",
siSysInfo.dwActiveProcessorMask);
}

В следующем примере используется функция GetSystemMetrics чтобы определить, установлена ли мышка и не поменялось ли функциональное назначение её кнопок. В примере также используется функция SystemParametersInfo для определения чувствительности мышки и её границ.

#include <windows.h>
#include <stdio.h>

void main()
{
BOOL fResult;
int aMouseInfo[3];

fResult = GetSystemMetrics(SM_MOUSEPRESENT);

if (fResult == 0)
printf("No mouse installed.\n");
else
{
printf("Mouse installed.\n");

// Определяем, не поменялись ли кнопки мышки.

fResult = GetSystemMetrics(SM_SWAPBUTTON);

if (fResult == 0)
printf("Buttons not swapped.\n");
else printf("Buttons swapped.\n");

// Получаем чувствительность мышки и её границы.

fResult = SystemParametersInfo(
SPI_GETMOUSE, // получить информацию о мышке
NULL, // не используется
&aMouseInfo, // сюда поместить информацию
NULL); // не используется

if( fResult )
{
printf("Speed: %d\n", aMouseInfo[2]);
printf("Threshold (x,y): %d,%d\n",
aMouseInfo[0], aMouseInfo[1]);
}
}
}

В следующем примере используется функция SystemParametersInfo для того, чтобы увеличить скорость мышки вдвое.

#include <windows.h>
#include <stdio.h>

void main()
{
BOOL fResult;
int aMouseInfo[3]; // массив для хранения информации

// Получаем текущую чувствительность мышки.

fResult = SystemParametersInfo(
SPI_GETMOUSE, // получаем информацию о мышке
NULL, // не используется
&aMouseInfo, // сюда поместить информацию
NULL); // не используется

// Умножаем на 2.

if( fResult )
{
aMouseInfo[2] = 2 * aMouseInfo[2];

// Меняем чувствительность мышки.

SystemParametersInfo(
SPI_SETMOUSE, // изменяем информацию мышки
NULL, // не используется
aMouseInfo, // массив с информацией
SPIF_SENDCHANGE); // обновить win.ini
}
}
Автор: ShIvADeSt
Дата сообщения: 28.10.2005 00:49
el Fighter

Цитата:
на счет открыть корпус и посмотреть - это курто

А я этого и не предлагал Я просто уточнил как работает данная функция в случае мультиядерных процов.
Кстати насчет GetSystemInfo ее же тебе давно уже посоветовали, только у нее не точность есть, что она не совсем корректно возвращает количество процов в случае, уточненном мною.
Автор: MoKC0DeR
Дата сообщения: 28.10.2005 07:16
я дал ИМХО очень хорошуй ссылку где рассказывается как узнать количество ЛОГИЧЕСКИХ и ФИЗИЧЕСКИХ процессоров. GetSystemInfo возвращает количество Логических процерров, т.е. при включенном HT будет показано 2 процессора, что имхо не совсем верно
Автор: ShIvADeSt
Дата сообщения: 28.10.2005 07:35
MoKC0DeR
Я качнул по той ссылке архив (написано что с сорцами) а там внутри только ехешник, что не есть хорошо, хотя в статье написано, что исходники внутри.
Автор: MoKC0DeR
Дата сообщения: 28.10.2005 10:12
ShIvADeSt
да действительно исходники почемуто отсутсвуют однако в статье дается описание как узнать все что надо. Также можно посмотреть - http://devforums.amd.com/index.php?s=31bf3d54f076fa73754811ba91dcafbd&showtopic=185&pid=888&st=0&#entry888

Страницы: 1

Предыдущая тема: Adabas Natural


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.