Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  11:38[Войти] | [Зарегистрироваться]
Ответ на вопрос № 34337

06-08-2005 03:28
Здраствуйте.
Мне очень нужно знать можно ли узнать на сколько тот или иной процесс загружает процессор (т.е. не загрузку всего процессора) и как это зделать.
    Спасибо за помощь.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

10-11-2005 04:10
Если очень долго думать, то на NT есть такая штука - Performance objects. Посмотри хотя бы в файла win32.hlp про то, как с ними работать. Я переписал пример, который там приводится на Delphi, получилось вот такое:

Const TotalBytes=8*1024;
      ByteIncrement=8*1024;
Type PPerfDataBlock=^TPerfDataBlock;
    TPerfDataBlock=packed record
      Signature:array[1..4]of widechar;
      LittleEndian:cardinal;
      Version:cardinal;
      Revision:cardinal;
      TotalByteLength:cardinal;
      HeaderLength:cardinal;
      NumObjectTypes:cardinal;
      DefaultObject:cardinal;
      SystemTime:TSystemTime;
      PerfTime:LARGE_INTEGER;
      PerfFreq:LARGE_INTEGER;
      PerfTime100nSec:LARGE_INTEGER;
      SystemNameLength:cardinal;
      SystemNameOffset:cardinal;
    end;
    PPerfObjectType=^TPerfObjectType;
    TPerfObjectType=packed record
      TotalByteLength:cardinal; // смещение до следующего объекта
      DefinitionLength:cardinal;
      HeaderLength:cardinal;
      ObjectNameTitleIndex:cardinal;
      ObjectNameTitle:PWideChar;
      ObjectHelpTitleIndex:cardinal;
      ObjectHelpTitle:PWideChar;
      DetailLevel:cardinal;
      NumCounters:cardinal;
      DefaultCounter:cardinal;
      NumInstances:integer;
      CodePage:cardinal;
      PerfTime:LARGE_INTEGER;
      PerfFreq:LARGE_INTEGER;
    end;
    PPerfCounterDefinition=^TPerfCounterDefinition;
    TPerfCounterDefinition=packed record
      ByteLength:cardinal;
      CounterNameTitleIndex:cardinal;
      CounterNameTitle:PWideChar;
      CounterHelpTitleIndex:cardinal;
      CounterHelpTitle:PWideChar;
      DefaultScale:cardinal;
      DetailLevel:cardinal;
      CounterType:cardinal;
      CounterSize:cardinal;
      CounterOffset:cardinal;
    end;
    PPerfInstanceDefinition=^TPerfInstanceDefinition;
    TPerfInstanceDefinition=packed record
      ByteLength:cardinal;
      ParentObjectTitleIndex:cardinal;
      ParentObjectInstance:cardinal;
      UniqueID:cardinal;
      NameOffset:cardinal;
      NameLength:cardinal;
    end;
    PPerfCounterBlock=^TPerfCounterBlock;
    TPerfCounterBlock=packed record
      ByteLength:cardinal;
    end;
    PBytes=^Bytes;
    Bytes=array[1..1024*1024]of byte;
var hKeyPerfLib:HKEY;
    Buf,BufSize,I,J:cardinal;
    K:integer;
    Data,Data2:PChar;
    PerfData:PPerfDataBlock;
    PerfObj:PPerfObjectType;
    PerfInst:PPerfInstanceDefinition;
    PerfCntr,CurCntr:PPerfCounterDefinition;
    PtrToCntr:PPerfCounterBlock;
    lpNameStrings:array of string;
    LastObject,LastInstance:TTreeNode;
begin
// get number of counter values
if RegOpenKeyEx(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows NT\CurrentVersion\Perflib',
  0,KEY_READ,hKeyPerflib)<>ERROR_SUCCESS then raise Exception.Create('Не смог открыть ключ Perflib');
BufSize:=sizeof(Buf);
RegQueryValueEx(hKeyPerflib,'Last counter',nil,nil,@Buf,@BufSize);
RegCloseKey(hKeyPerflib);
SetLength(lpNameStrings,Buf+1);
if RegOpenKeyEx(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows NT\CurrentVersion\Perflib\019',
  0,KEY_READ,hKeyPerfLib)<>ERROR_SUCCESS then raise Exception.Create('Не смог открыть ключ Perflib\019');
RegQueryInfoKey(hKeyPerflib,nil,nil,nil,nil,nil,nil,nil,nil,@BufSize,nil,nil);
Inc(BufSize);GetMem(Data,BufSize);
RegQueryValueEx(hKeyPerflib,'Counter',nil,nil,PByte(Data),@BufSize);
GetMem(Data2,1024);I:=0;
repeat
  J:=0;while(Data[I]<>#0)do begin Data2[J]:=Data[I];Inc(I);Inc(J);end;
  Data2[J]:=#0;val(StrPas(Data2),Buf,K);if K<>0 then break;
  Inc(I);if Data[I]=#0 then break;
  J:=0;while(Data[I]<>#0)do begin Data2[J]:=Data[I];Inc(I);Inc(J);end;
  Data2[J]:=#0;lpNameStrings[Buf]:=StrPas(Data2);
  Inc(I);if Data[I]=#0 then break;
until false;
FreeMem(Data);FreeMem(Data2);
RegCloseKey(hKeyPerflib);
BufSize:=TotalBytes;GetMem(PerfData,BufSize);
while RegQueryValueEx(HKEY_PERFORMANCE_DATA,'Global',nil,nil,PByte(PerfData),@BufSize)=ERROR_MORE_DATA do begin
  FreeMem(PerfData,BufSize);
  Inc(BufSize,ByteIncrement);
  GetMem(PerfData,BufSize);
end;
PerfObj:=PPerfObjectType(cardinal(PerfData)+PerfData.HeaderLength); // Get the first object type.
LastObject:=nil;Tree.Items.Clear;Tree.Items.BeginUpdate;
I:=0;While(I<PerfData.NumObjectTypes)do begin // Process all objects.
  // Display the object by index and name.
  LastObject:=Tree.Items.Add(LastObject,Format('Объект %u: %s',[PerfObj.ObjectNameTitleIndex,lpNameStrings[PerfObj.ObjectNameTitleIndex]]));
  PerfCntr:=PPerfCounterDefinition(cardinal(PerfObj)+PerfObj.HeaderLength); // Get the first counter.
  if(PerfObj.NumInstances>0)then begin
  PerfInst:=PPerfInstanceDefinition(cardinal(PerfObj)+PerfObj.DefinitionLength);// Get the first instance.
  K:=0;while(K<PerfObj.NumInstances)do begin // Retrieve all instances.
    // Display the instance by name.
    LastInstance:=Tree.Items.AddChild(LastObject,Format('Экземпляр %u: %s: ',[K,StrPas(pchar(cardinal(PerfInst)+PerfInst.NameOffset))]));
    CurCntr:=PerfCntr;
    J:=0;while(J<PerfObj.NumCounters)do begin // Retrieve all counters.
    // Display the counter by index and name.
    Tree.Items.AddChild(LastInstance,Format('Счетчик %u: %s',[CurCntr.CounterNameTitleIndex,lpNameStrings[CurCntr.CounterNameTitleIndex]]));
    CurCntr:=PPerfCounterDefinition(cardinal(CurCntr)+PerfCntr.ByteLength); // Get the next counter.
    Inc(J);
    end; // все счетчики выведены
    PtrToCntr:=PPerfCounterBlock(cardinal(PerfInst)+PerfInst.ByteLength); // Get the counter block.
    PerfInst:=PPerfInstanceDefinition(cardinal(PtrToCntr)+PtrToCntr.ByteLength); // Get the next instance.
    Inc(K);
  end;
  end else if PerfObj.NumCounters>0 then begin
  // PtrToCntr:=PPerfCounterBlock(cardinal(PerfObj)+PerfObj.DefinitionLength); // Get the counter block.
  LastInstance:=Tree.Items.AddChild(LastObject,'Экземпляр 0');
  J:=0;while(J<PerfObj.NumCounters)do begin // Retrieve all counters.
    // Display the counter by index and name.
    Tree.Items.AddChild(LastInstance,Format('Счетчик %u: %s',[PerfCntr.CounterNameTitleIndex,lpNameStrings[PerfCntr.CounterNameTitleIndex]]));
    PerfCntr:=PPerfCounterDefinition(cardinal(PerfCntr)+PerfCntr.ByteLength); // Get the next counter.
    Inc(J);
  end;
  end;
  PerfObj:=PPerfObjectType(cardinal(PerfObj)+PerfObj.TotalByteLength); // Get the next object type.
  inc(I);
end;
Tree.Items.EndUpdate;
RegCloseKey(HKEY_PERFORMANCE_DATA);
SetLength(lpNameStrings,0);
FreeMem(PerfData,BufSize);
end;


Этот код только получает список производительности и оформляет в виде дерева. Надо еще получать и расшифровывать сами счетчики, просто пока я на эту проблему забил, может, как нибуть позднее и сделаю.

17-08-2005 15:47 | Комментарий к предыдущим ответам
>>> как можно узнать имя процесса, к которому принадлежит то или иное окно
The GetWindowThreadProcessId function retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window.

08-08-2005 10:12 | Сообщение от автора вопроса
Это то понятно, а как это узнать програмно, и как можно узнать имя процесса, к которому принадлежит то или иное окно (название окна известно).

08-08-2005 00:30
пуск-программы-администрирование-системный монитор

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Два кольца, два конца, посередине гвоздик.
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования