Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2010, 09:02   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

попробуй Читать из реестра HKEY_DYN_DATA\PerfStats\StatData соответствующий ключ Kernel \CPUUsage.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.05.2010, 08:44   #12
Iong
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 39
По умолчанию

Выше читайте, пробовал я с реестра считать эту информацию, не получается, даже код приводил.
Iong вне форума Ответить с цитированием
Старый 09.05.2010, 15:35   #13
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Как я понял вам нужен код для СИ, вот я ради интереса наклепал консольную прогу в Watcom C++. Действовал по образу и подобию http://pblog.ru/?p=98 и вот что получилось...
http://vitalijserov.blogspot.com/201...en-watcom.html
Может поможет... спрашивай если что непонятно...

Последний раз редактировалось Виталий Серов; 09.05.2010 в 18:52.
Виталий Серов вне форума Ответить с цитированием
Старый 11.05.2010, 11:58   #14
Iong
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 39
По умолчанию

Программа компилируется, что уже радует) вот только работать не работает. останавливается на шаге Init data...
и дальше пишет :
error of funcДля продолжения нажмите любую клавишу.
А если я коммент ставлю на это условие, то всегда 100% загрузки пишет.

Последний раз редактировалось Iong; 11.05.2010 в 12:13.
Iong вне форума Ответить с цитированием
Старый 11.05.2010, 14:49   #15
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

А exe из статьи у вас работает?
Если ДА, то значит ваш компилятор что-то не так делает... Например можно заменить __pascalна __stdcall, у меня БОРТЛАНДА СИ нет и я в нём не программировал поэтому помочь не могу, но подозреваю, что дело в неправильной передаче параметров в функцию...

EDIT...
Проблема ещё может скрываться в многоядерности, у меня одноядерный процессор и программа не испытывалась на двух-, четырёхядерных машинах. Попробуй увеличить размер буфера данных или выделяй память точно по количеству ядер.

Последний раз редактировалось Виталий Серов; 11.05.2010 в 15:07. Причина: вспомнил...
Виталий Серов вне форума Ответить с цитированием
Старый 12.05.2010, 06:24   #16
Iong
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 39
По умолчанию

Спасибо, поменял паскал на __stdcall стала работать на виртуально машине(одно ядро) на основной машине (два ядра) тоже работает, но выдает processor usage с минусами, в результате получается что загрузка ЦП в минусе указывается. Собственно хотелось сделать эту функцию универсальной для любого многопроцессорного компьютера, подскажите как это сделать?
И еще в добавку, я конечно подумаю как сделать для каждого процесса загрузку ЦП, но вы додумаетесь быстрее, поэтому приведу кусок программы в котором я характеристики процессов вывожу, вот в него где то и нужно засунуть загрузку ЦП каждым процессом:
Код:
BOOL GetProcessList( )
{
  hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
  if( hProcessSnap == INVALID_HANDLE_VALUE )
  {
    return( FALSE );
  }

  pe32.dwSize = sizeof( PROCESSENTRY32 );

  if( !Process32First( hProcessSnap, &pe32 ) )
  {
    CloseHandle( hProcessSnap );
    return( FALSE );
  }
  do
  {
    Form1->StringGrid1->Cells[0][CountProc]=pe32.szExeFile;
    qwe=StrComp(Form1->StringGrid1->Cells[0][CountProc].c_str(),"Graphik.exe");
    if(qwe==0)
        FlagBlokGr=TRUE;
    else FlagBlokGr=FALSE;
    dwPriorityClass = 0;
    hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );
    if( hProcess == NULL ){}
    else
    {
      dwPriorityClass = GetPriorityClass( hProcess );
      if( !dwPriorityClass )
      CloseHandle( hProcess );
    }
    Form1->StringGrid1->Cells[1][CountProc]=pe32.th32ProcessID;
    Form1->StringGrid1->Cells[2][CountProc]=pe32.th32ParentProcessID;
    Form1->StringGrid1->Cells[3][CountProc]=pe32.cntThreads;
    switch(pe32.pcPriClassBase)
    {
    case 24:
    Form1->StringGrid1->Cells[4][CountProc]="Реального времени";
    break;
    case 13:
    Form1->StringGrid1->Cells[4][CountProc]="Высокий";
    break;
    case 10:
    Form1->StringGrid1->Cells[4][CountProc]="Выше среднего";
    break;
    case 8:
    Form1->StringGrid1->Cells[4][CountProc]="Средний";
    break;
    case 6:
    Form1->StringGrid1->Cells[4][CountProc]="Ниже среднего";
    break;
    case 4:
    Form1->StringGrid1->Cells[4][CountProc]="Низкий";
    break;
    default:
    Form1->StringGrid1->Cells[4][CountProc]=pe32.pcPriClassBase;
    }
  CountProc++;

  } while( Process32Next( hProcessSnap, &pe32 ) );

      if(FlagBlokGr==FALSE)
      {
      Form1->Button3->Enabled=TRUE;
      TerminateThread (thP,NULL);
      }

  CloseHandle( hProcessSnap );
  Form1->StringGrid1->RowCount=CountProc;
  CountProc=1;
  return( TRUE );
}

Последний раз редактировалось Stilet; 17.05.2010 в 08:38.
Iong вне форума Ответить с цитированием
Старый 12.05.2010, 07:35   #17
Iong
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 39
По умолчанию

Виталий и еще если не трудно то помогите пожалуйста вот с этим:
http://programmersforum.ru/showthrea...t=96170&page=2
Iong вне форума Ответить с цитированием
Старый 12.05.2010, 14:27   #18
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Цитата:
Спасибо, поменял паскал на __stdcall стала работать на виртуально машине(одно ядро) на основной машине (два ядра) тоже работает, но выдает processor usage с минусами, в результате получается что загрузка ЦП в минусе указывается. Собственно хотелось сделать эту функцию универсальной для любого многопроцессорного компьютера, подскажите как это сделать?
исправил код, теперь работает на многоядерных системах...
Виталий Серов вне форума Ответить с цитированием
Старый 14.05.2010, 06:11   #19
Iong
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 39
По умолчанию

А по каждому процессу загрузку ЦП не знаете как сделать?
Iong вне форума Ответить с цитированием
Старый 14.05.2010, 18:21   #20
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Всё тоже самое, только с ф-й GetThreadTimes, GetProcessTimes.

Последний раз редактировалось Виталий Серов; 14.05.2010 в 18:52. Причина: ещё одна функция
Виталий Серов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить тактовою частоту процессора и узнать название активной видеокарты и объём памяти SalasAndriy C++ Builder 7 14.04.2012 16:17
Процент в RzProgressBar artemavd Компоненты Delphi 1 22.02.2010 22:53
Как узнать вес HTML-странички без загрузки - idhttp.head(url); Gonzo Работа с сетью в Delphi 6 07.11.2009 18:20
Процент загруженности asd48 Общие вопросы C/C++ 13 07.06.2009 21:04
Раскрутка Ваших заказчиков в поисковиках за процент Очкарики Фриланс 1 26.05.2009 08:31