Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как программно достать частоту ЦП и объём ОЗУ 
:(
    Опции темы
mo3art
Дата 3.10.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 29.9.2005
Где: пло не та 3 емля

Репутация: нет
Всего: нет



Где-то год назад, когда работал с IWbemServices вроде бы видел что можно достать эти данные, но тогда это нафиг было не нужно... а теперь вот нужно, но не могу чего-то найти...
Ткните носом, если кто помнит где по этому поводу написано.

PS - поиском вроде искал, так что ногами прошу не пинать... smile
PM MAIL   Вверх
Greblin
Дата 3.10.2005, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.5.2005
Где: Москва

Репутация: нет
Всего: нет



Частоту процессора можно из реестра прочитать:
Код

TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", false);
LProcMHz->Caption = IntToStr(reg->ReadInteger("~MHz")) + " MHz";
delete reg;


А ОЗУ
Код

MEMORYSTATUS mi;
mi.dwLength = sizeof(mi);
GlobalMemoryStatus(&mi);
LMemoryLoad->Caption = IntToStr(mi.dwMemoryLoad) + "%"; //использовано памяти
LTotalFiz->Caption = FloatToStr(mi.dwTotalPhys / 1024) + " Kb"; //всего ОЗУ
LAvailFiz->Caption = FloatToStr(mi.dwAvailPhys / 1024) + " Kb"; //свободно ОЗУ
LTotalPF->Caption = FloatToStr(mi.dwTotalPageFile / 1024) + " Kb"; //всего файла подкачки
LAvailPF->Caption = FloatToStr(mi.dwAvailPageFile / 1024) + " Kb"; //свободно файла подкачки
LTotalVirtual->Caption = FloatToStr(mi.dwTotalVirtual / 1024) + " Kb"; //объём адресного пространства
LAvailVirtual->Caption = FloatToStr(mi.dwAvailVirtual / 1024) + " Kb";  //свободно адресного пространства

PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 6.10.2005, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 4
Всего: 47



Можно самому реальную частоту определить:
Код

#include <stdio.h>
#include <windows.h>
#include  <math.h>
FLOAT MeasureClockSpeed()
{
    DWORD            ticks;              // Microseconds elapsed during test
    DWORD            cycles;             // Clock cycles elapsed during test
    DWORD            stamp0, stamp1;     // Time Stamp Variable for beginning and end of test                                            
  DWORD         freq = 0;
    DWORD         freq2 =0;           // 2nd most current frequ. calc.
    DWORD         freq3 =0;           // 3rd most current frequ. calc.
    DWORD         total;              // Sum of previous three frequency calculations
    int           tries=0;            // Number of times a calculation has been made on this call
    LARGE_INTEGER t0,t1;              // Variables for High-Resolution Performance Counter reads                    
    LARGE_INTEGER count_freq;           // High Resolution Performance Counter frequency

    if (!QueryPerformanceFrequency( &count_freq ) ) return 0.0f;
  
#if !defined (PHARLAP)
  DWORD priority_class     = GetPriorityClass(GetCurrentProcess());
#endif
  int  thread_priority    = GetThreadPriority(GetCurrentThread());

#if !defined (PHARLAP)
  SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
#endif
  SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

    do 
    {
        tries++;        //Increment number of times sampled on this call to cpuspeed
        freq3 = freq2;  //Shift frequencies back to make
        freq2 = freq;   //room for new frequency measurement
    QueryPerformanceCounter(&t0);
    t1.LowPart  = t0.LowPart;        // Set Initial time
    t1.HighPart = t0.HighPart;

    while ( (DWORD)t1.LowPart - (DWORD)t0.LowPart<50)
    {
      QueryPerformanceCounter(&t1);
    }
    
    _asm
    {
      rdtsc
        mov stamp0, EAX
    }

        t0.LowPart  = t1.LowPart;     // Reset Initial 
        t0.HighPart = t1.HighPart;        // Time
    
    while ((DWORD)t1.LowPart-(DWORD)t0.LowPart<1000 )
    {
      QueryPerformanceCounter(&t1);
    }
    
    _asm
    {
      rdtsc
        mov        stamp1, EAX
    }
    
    cycles = stamp1 - stamp0;
    ticks = (DWORD) t1.LowPart - (DWORD) t0.LowPart;    

        ticks = ticks * 100000;                
        ticks = ticks / ( count_freq.LowPart/10 );        
        
        if ( ticks%count_freq.LowPart > count_freq.LowPart/2 )
        {
      ticks++;            // Round up if necessary
    }
        
        freq = cycles/ticks;    // Cycles / us  = MHz
                                      
    if ( cycles%ticks > ticks/2 )
    {
      freq++;                // Round up if necessary
        }
    
    total = ( freq + freq2 + freq3 );
  } while (    (tries < 3 ) || (tries < 20) && ((abs(3 * freq -total) > 3) ||
        (abs(3 * freq2-total) > 3) || (abs(3 * freq3-total) > 3)));
        
    if ( total / 3  !=  ( total + 1 ) / 3 )
  {
        total ++;                // Round up if necessary
    }

    // restore the thread priority
#if !defined (PHARLAP)
    SetPriorityClass(GetCurrentProcess(), priority_class);
#endif
    SetThreadPriority(GetCurrentThread(), thread_priority);
  
  return float(total) / 3.01f;
}

int main(int argc, char* argv[])
{
  FLOAT Mhz = MeasureClockSpeed();
    printf("Mhz=%f !\n",Mhz);
  return 0; 
}



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.