Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Количество процессоров в ПК

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

el Fighter

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

Всего записей: 2 | Зарегистр. 25-10-2005 | Отправлено: 16:44 25-10-2005
MoKC0DeR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
http://www.intel.com/cd/ids/developer/asmo-na/eng/200678.htm?page=1

Всего записей: 510 | Зарегистр. 31-03-2004 | Отправлено: 17:26 25-10-2005
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
el Fighter
WinAPI:
GetSystemInfo
 

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 20:26 26-10-2005
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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;
 

взято с рабочего примера...
 
будет не понятно, пиши в ПМ, вышлю исходник..

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 20:45 26-10-2005 | Исправлено: DroN_S, 20:46 26-10-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DroN_S

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

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

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

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

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:51 27-10-2005
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

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

Скорее всего как 2. Во всяком случае, на одном P4 HT GetSystemInfo() говорит, что два процессора.

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 07:54 27-10-2005
el Fighter

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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
   }
}

Всего записей: 2 | Зарегистр. 25-10-2005 | Отправлено: 13:58 27-10-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
el Fighter

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

А я этого и не предлагал Я просто уточнил как работает данная функция в случае мультиядерных процов.
Кстати насчет GetSystemInfo ее же тебе давно уже посоветовали, только у нее не точность есть, что она не совсем корректно возвращает количество процов в случае, уточненном мною.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:49 28-10-2005
MoKC0DeR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
я дал ИМХО очень хорошуй ссылку где рассказывается как узнать количество ЛОГИЧЕСКИХ и ФИЗИЧЕСКИХ процессоров. GetSystemInfo возвращает количество Логических процерров, т.е. при включенном HT будет показано 2 процессора, что имхо не совсем верно

Всего записей: 510 | Зарегистр. 31-03-2004 | Отправлено: 08:16 28-10-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MoKC0DeR
Я качнул по той ссылке архив (написано что с сорцами) а там внутри только ехешник, что не есть хорошо, хотя в статье написано, что исходники внутри.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 08:35 28-10-2005
MoKC0DeR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt
да действительно исходники почемуто отсутсвуют однако в статье дается описание как узнать все что надо. Также можно посмотреть - http://devforums.amd.com/index.php?s=31bf3d54f076fa73754811ba91dcafbd&showtopic=185&pid=888&st=0&#entry888

Всего записей: 510 | Зарегистр. 31-03-2004 | Отправлено: 11:12 28-10-2005
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Количество процессоров в ПК


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru