На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > % Загрузки CPU
      Примерно вот таким способом:

      ExpandedWrap disabled
        const
          SystemBasicInformation = 0;
          SystemPerformanceInformation = 2;
          SystemTimeOfDayInformation = 3;
         
        type
          SYSTEM_BASIC_INFORMATION = packed record
            AlwaysZero              : ULONG;
            uKeMaximumIncrement     : ULONG;
            uPageSize               : ULONG;
            uMmNumberOfPhysicalPages: ULONG;
            uMmLowestPhysicalPage   : ULONG;
            uMmHighestPhysicalPage  : ULONG;
            uAllocationGranularity  : ULONG;
            pLowestUserAddress      : POINTER;
            pMmHighestUserAddress   : POINTER;
            uKeActiveProcessors     : POINTER;
            bKeNumberProcessors     : BYTE;
            Filler                  : array [0..2] of BYTE;
          end;
         
          SYSTEM_PERFORMANCE_INFORMATION = packed record
            nIdleTime               : INT64;
            dwSpare                 : array [0..75]of DWORD;
          end;
         
          SYSTEM_TIME_INFORMATION = packed record
            nKeBootTime             : INT64;
            nKeSystemTime           : INT64;
            nExpTimeZoneBias        : INT64;
            uCurrentTimeZoneId      : ULONG;
            dwReserved              : DWORD;
          end;
         
          function NtQuerySystemInformation(
            SystemInformationClass: DWORD;   // тип требуемой информации
            SystemInformation : Pointer;     // указатель на буфер, в который вернется информация
            SystemInformationLength : DWORD; // размер буфера в байтах
            var ReturnLength: DWORD          // сколько байт было возвращено или требуется
            ): DWORD; stdcall; external 'ntdll.dll';
         
        ...
         
        var
          nOldIdleTime    : Int64 = 0;
          nOldSystemTime  : INT64 = 0;
          nNewCPUTime     : ULONG = 0;
         
        procedure TTMDemo.tmrRefreshTimer(Sender: TObject);
        var
          spi : SYSTEM_PERFORMANCE_INFORMATION;
          sti : SYSTEM_TIME_INFORMATION;
          sbi : SYSTEM_BASIC_INFORMATION;
          Dummy: DWORD;
        begin
          if NTQuerySystemInformation(SystemBasicInformation, @sbi,
            SizeOf(SYSTEM_BASIC_INFORMATION), Dummy) = NO_ERROR then
            if NTQuerySystemInformation(SystemTimeOfDayInformation, @sti,
              SizeOf(SYSTEM_TIME_INFORMATION), Dummy) = NO_ERROR then
              if NTQuerySystemInformation(SystemPerformanceInformation, @spi,
                SizeOf(SYSTEM_PERFORMANCE_INFORMATION), Dummy) = NO_ERROR then
              begin
                if (nOldIdleTime <> 0) then
                begin
                  nNewCPUTime:= Trunc(100 - ((spi.nIdleTime - nOldIdleTime)
                    / (sti.nKeSystemTime - nOldSystemTime) * 100)
                    / sbi.bKeNumberProcessors + 0.5);
                  if (nNewCPUTime <> nOldIdleTime) then
                    Caption := IntToStr(nNewCPUTIME);
                end;
                nOldIdleTime   := spi.nIdleTime;
                nOldSystemTime := sti.nKeSystemTime;
              end;
        end;
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0319 ]   [ 16 queries used ]   [ Generated: 2.05.24, 18:03 GMT ]