Как определить аппаратные средства (ЦП и RAM) на машине?

Вы правы, что вам неудобно с этим кодом. Кажется, что каждый из вызванных методов знает, какая следующая строка должна быть обработана, поэтому они тесно связаны, и логика для принятия решения о следующей строке распределена по нескольким методам. Yeuch! Если следующий ряд действительно должен быть на 1 больше предыдущего, то, вероятно, лучше централизовать эту логику в методе createControlPanel:

private void createControlPanel() {
  int initialRow = 0;
  initSessionControls(controlPanelGB, initialRow);
  initBidControls(controlPanelGB, initialRow+1);
  initSnapshotControls(controlPanelGB, initialRow+2);
}

Это яснее, чем ваше второе решение выше, так как ясно что второй аргумент является строкой, и как он связан с начальным значением строки.

15
задан Robert Gould 12 May 2009 в 02:07
поделиться

7 ответов

В Windows вы можете использовать GlobalMemoryStatusEx для получения фактического объема ОЗУ.

Информацию о процессоре можно получить через GetSystemInfo .

10
ответ дан 1 December 2019 в 01:00
поделиться

В Windows для определения тактовой частоты процессора:

double CPUSpeed()
{
    wchar_t Buffer[_MAX_PATH];
    DWORD BufSize = _MAX_PATH;
    DWORD dwMHz = _MAX_PATH;
    HKEY hKey;

    // open the key where the proc speed is hidden:
    long lError = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
                                0,
                                KEY_READ,
                                &hKey);
    if(lError != ERROR_SUCCESS)
    {// if the key is not found, tell the user why:
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                        NULL,
                        lError,
                        0,
                        Buffer,
                        _MAX_PATH,
                        0);
        wprintf(Buffer);
        return 0;
    }

    // query the key:
    RegQueryValueEx(hKey, L"~MHz", NULL, NULL, (LPBYTE) &dwMHz, &BufSize);
    return (double)dwMHz;
}
6
ответ дан 1 December 2019 в 01:00
поделиться

Вот один из способов получить нужную информацию на машине Windows. Я скопировал и вставил его из реального проекта с некоторыми незначительными изменениями, поэтому не стесняйтесь очистить его, чтобы было больше смысла.

        int CPUInfo[4] = {-1};
        unsigned   nExIds, i =  0;
        char CPUBrandString[0x40];
        // Get the information associated with each extended ID.
        __cpuid(CPUInfo, 0x80000000);
        nExIds = CPUInfo[0];
        for (i=0x80000000; i<=nExIds; ++i)
        {
            __cpuid(CPUInfo, i);
            // Interpret CPU brand string
            if  (i == 0x80000002)
                memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo));
            else if  (i == 0x80000003)
                memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo));
            else if  (i == 0x80000004)
                memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo));
        }
        //string includes manufacturer, model and clockspeed
        cout << "CPU Type: " << CPUBrandString << endl;


        SYSTEM_INFO sysInfo;
        GetSystemInfo(&sysInfo);
        cout << "Number of Cores: " << sysInfo.dwNumberOfProcessors << endl;

        MEMORYSTATUSEX statex;
        statex.dwLength = sizeof (statex);
        GlobalMemoryStatusEx(&statex);
        cout << "Total System Memory: " << (statex.ullTotalPhys/1024)/1024 << "MB" << endl;

Для получения дополнительной информации см. GetSystemInfo , GlobalMemoryStatusEx и __ CPUID . Хотя я не включил его, вы также можете определить, является ли ОС 32 или 64-разрядной, с помощью функции GetSystemInfo.

7
ответ дан 1 December 2019 в 01:00
поделиться

Процессор прост. Используйте инструкцию cpuid . Я оставлю другие плакаты, чтобы найти портативный способ определить, сколько оперативной памяти есть в системе. : -)

Для методов, специфичных для Linux, вы можете получить доступ к / proc / meminfo / proc / cpuinfo , если вам не удается проанализировать cpuid ответов).

5
ответ дан 1 December 2019 в 01:00
поделиться

В Linux вы можете анализировать / proc / cpuinfo (содержит блок информации о каждом процессоре) и / proc / meminfo (содержит различные общие статистические данные о памяти, включая MemTotal).

4
ответ дан 1 December 2019 в 01:00
поделиться

http://en.wikipedia.org/wiki/CPUID Может помочь для CPUID

1
ответ дан 1 December 2019 в 01:00
поделиться

В Solaris:

-Для памяти

 prtconf | grep Memory

-Для ЦП

 psrinfo -v | grep MHz
1
ответ дан 1 December 2019 в 01:00
поделиться