| 
| 
 | Вопрос # 2 895/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Сразу прошу прощения за такой дурной вопрос. Но мне очень нужно разобраться в коде, который осуществляет определение загрузки центрального процессора. Понять сам алгоритм, как происходит определение этого значения.
 Заранее благодарю за ответы!
 Приложение:Переключить в обычный режим  function GetCPUUsage: Integer;var  SysBaseInfo: TSystem_Basic_Information;  SysPerfInfo: TSystem_Performance_Information;  SysTimeInfo: TSystem_Time_Information;  status: Longint;   dbSystemTime: Double;  dbIdleTime: Double;begin  if @NtQuerySystemInformation = nil then    NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'),      'NtQuerySystemInformation');    status := NtQuerySystemInformation(0, @SysBaseInfo, SizeOf(SysBaseInfo), nil);    if status <> 0 then Exit;    status := NtQuerySystemInformation(3, @SysTimeInfo, SizeOf(SysTimeInfo), 0);    if status <> 0 then Exit;    status := NtQuerySystemInformation(2, @SysPerfInfo, SizeOf(SysPerfInfo), nil);    if status <> 0 then Exit;    liOldIdleTime := SysPerfInfo.liIdleTime;    liOldSystemTime := SysTimeInfo.liKeSystemTime;    Sleep(1000);    status := NtQuerySystemInformation(3, @SysTimeInfo, SizeOf(SysTimeInfo), 0);    if status <> 0 then Exit;    status := NtQuerySystemInformation(2, @SysPerfInfo, SizeOf(SysPerfInfo), nil);    if status <> 0 then Exit;    dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);    dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);     dbIdleTime := dbIdleTime / dbSystemTime;     dbIdleTime := 100 - dbIdleTime * 100;     result:= Trunc(dbIdleTime) + Trunc (Frac(dbIdleTime) * 2);end; 
|  |   Вопрос задала: Insomnia (статус: Посетитель)Вопрос отправлен: 10 июня 2009, 15:05
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Пупкин В В Здравствуйте, Insomnia!узнается количество процессоров
 потом каждую секунду получаем время простоя и загргрузки проца т.к. винда любит считать время от "начала времен"
 вычитаем получая время которое реально работает и бездействует проц
 получаем соотношение времен, а затем переводим в проценты учитывая сколько у нас процессоров
 вот и все
 я так понял по крайней мере =)
 
|  | Ответ отправил: Пупкин В В (статус: 2-ой класс)Время отправки: 10 июня 2009, 16:17
 
 |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 10 июня 2009, 16:24; участников в обсуждении: 1. 
|   | Пупкин В В (статус: 2-ой класс), 10 июня 2009, 16:24 [#1]:хотя меня смущает result:= Trunc(dbIdleTime) + Trunc (Frac(dbIdleTime) * 2);
 и то что не учитываем количество процессоров
 вернее тут он один наверно
 код то 100% рабочий? показывает верный результат?
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |