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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2008, 08:27   #1
Disb
Новичок
Джуниор
 
Регистрация: 20.02.2008
Сообщений: 1
По умолчанию Частота процессора. Delphi

Нашел код в DelphiWorld и у вас на C -http://www.programmersforum.ru/showthread.php?t=8457
Самое интересное, что этот же код присутствует в методичке по ОС в качестве авторского.
Код:
function GetCPUSpeed: Double;
const
  DelayTime = 500;
var
  TimerHi: DWORD;
  TimerLo: DWORD;
  PriorityClass: Integer;
  Priority: Integer;
 begin
  PriorityClass := GetPriorityClass(GetCurrentProcess);
  Priority := GetThreadPriority(GetCurrentThread);
  SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
  SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
  Sleep(10);
  asm
   dw 310Fh         // rdtsc
   MOV TimerLo, EAX
   MOV TimerHi, EDX
  end;
  Sleep(DelayTime);
  asm
    dw 310Fh         // rdtsc
    SUB EAX, TimerLo
    SBB EDX, TimerHi
    MOV TimerLo, EAX
    MOV TimerHi, EDX
  end;
  SetThreadPriority(GetCurrentThread, Priority);
  SetPriorityClass(GetCurrentProcess, PriorityClass);
  Result:=TimerLo/(1000.0 * DelayTime);
end;
Был бы очень благодарен, если бы вы построчно объяснили, зачем нужна конкретная команда в каждой строке.

Последний раз редактировалось Disb; 20.02.2008 в 08:30.
Disb вне форума Ответить с цитированием
Старый 20.02.2008, 09:28   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Этот код уже лет 15 присутствует везде, куда не глянь. Что тут объяснять? Инструкция RDTSC (Read Time-Stamp Counter) помещает значение счетчика времени из регистра состояния машины в EDX:EAX. Способ, кстати, ненадежный - соответствующей установкой регистра CR4 доступ к ней остается только на нулевом уровне привилегий. SUB - целое вычитание, SBB - целое вычитание с заёмом флага CF, MOV перемещает значение из правого операнда в левый. Учите ассемблер и читайте докумены Intel. А то, что в дельфи RDTSC надо через опкод писать - удивило...
----------------
Немного поправлюсь, а то непонятно получилось: не счётчка времени, а счётчика тактов процессора.

Последний раз редактировалось B_N; 20.02.2008 в 09:49.
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Превышена частота Showy Компьютерное железо 6 08.07.2008 12:48
Частота и количество valko12 Microsoft Office Excel 14 21.05.2008 11:41
Системный таймер и частота процессора falabella Помощь студентам 12 26.04.2008 00:45
Delphi 6 - Программа должна узнать уровень загруженности процессора Никки Общие вопросы Delphi 3 20.11.2007 19:40