Скорость работы процессора, точный таймер
Данная тема уже обсуждалась, но у меня есть своя реализация сабжа. Начиная с Pentium MMX, Intel ввели в процессор счетчик тактов на 64 бита (Присутствуэт точно и в К6). Для того чтобы посотреть на его содержание, была введена команда "rdtsc" (подробное описание в интеловской мануале). Эту возможность можно использовать для реализации сабжа. Посоку Делфя не вкурсе насчет rdtsc, то пришлось юзать опкод (0F31). Привожу простенький примерчик юзания, Вы уж извините - немножко кривоват получился, да и ошибка компалера какая-то вылезла :( (V4 Bld5.104 Upd 2). Кому интересно, поделитесь своими соображениями по этому поводу. Особенно интерисует работа в режиме когда меняется частота процессора (Duty Cycle, StandBy).
type TForm1 = class(TForm) Label1: TLabel; Timer1: TTimer; Label2: TLabel; Label3: TLabel; Button1: TButton; Button2: TButton; Label4: TLabel; procedure Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } Counter:integer; //Счетчик срабатывания таймера Start:int64; //Начало роботы Previous:int64; //Предыдущее значение PStart,PStop:int64; //Для примера выч. времени CurRate:integer; //Текущая частота проца function GetCPUClick:int64; function
GetTime(Start,Stop:int64):double; end;
var Form1: TForm
1;
implementation
{$R *.DFM} // Ф!
ункция р
аботает на пнях ММХ или выше а // также проверялась на К6 function TForm1.GetCPUClick:int64; begin asm db 0fh,31h // Опкод для команды rdtsc mov dword ptr result,eax mov dword ptr result[4],edx end; // Не смешно :(. Без ?той штуки // Компайлер выдает Internal error C1079 Result:=Result; end;
// Время в секундах между старт и стоп function TForm1.GetTime(Start,Stop:int64):double; begin try result:=(Stop-Start)/CurRate except result:=0; end; end;
// Обработчик таймера считает текущую частоту, выводит ее, а также // усредненную частоту, текущий такт с момента старта процессора. // При постоянной частоте процессора желательно интервал брать побольше //
1-5с для точного прощета частоты процессора. procedure TForm1.Timer1Time
r(Sender: TObject); var i:int64; begin i:=GetCPUClick; if Counter=0 then Start:=i elsebegin Label2.Caption:=Format('Частота общая: %2f',[(i-Start)/(Counter*Timer1.Interval*1000)]); Label3.Caption:=Format('Частота текущая: %2f',[(i-Previous)/(Timer1.Interval*1000)]); CurRate:=Round(((i-Previous)*1000)/(Timer1.Interval)); end; Label1.Caption:='Такты: '+IntToStr(i); Previous:=i; Inc(Counter); end;
procedure TForm1.FormActivate(Sender: TObject); begin Counter:=0; end;
// Заносим стартовое время для примера procedure TForm1.Button1Click(Sender: TObject); begin PStart:=GetCPUClick; end;
// Останавливаем отсчет времени и показуем соко //
прошло секунд procedure TForm1.Button2Click(Sender: TObject); begin<
/b> PStop:=GetCPUClick; Label4.Caption:=Format('Вр!
емя межд
у нажатиями: %gсек',[GetTime(PStart,PStop)]) end;
Извлечение иконки
Здраствуйте мастера! Подскажите как извлечь из ЛЮБОГО файла или папки иконку и добавать её в ImageList???
Зачем нужены курсоры?
В нескольких книгах которые у меня есть написано "тра-та-та... курсоры бывают read-only, scrollable, dynamic, ...
SysDcu 7 - где же эти 5 кБ ?
Привет всем, установил себе замену SysDcu для Delphi7, но не вижу никакого эффекта. Пустая форма "безо всего" как ...
Азбука Морзе
Подскажите, плиз, по возможности с примерчиком, как в 2000 винде сформировать телеграфную азбуку морзе через колонки. ...
Чем заменить idHTTP
Проблема вот в чем: работал с idHTTP - компонент очень хороший, много свойств, но нет полноценной возможности ...
Как перехватить изменения в реестре
Приветствую всех Мастеров!!! Подскажите, как мне перехватить моим приложением изменения произошедшие в реестре, ...
Поразрядная сортировка
Пожалуй, ни один алгоритм не применяется так часто, как алгоритм сортировки. Говорят также, что программа сортировки массива была первой программой, написанной для ЭВМ. С тех пор придумано множество алгоритмов, позволяющих упорядочить данные тем или иным образом, но, как ни странно, ни один из них нельзя назвать универсальным. В этой статье рассматривается достаточно редко встречающийся метод цифровой (поразрядной) сортировки.
Система программирования Delphi (+ дискета)
Книга рассказывает об одной из самых распространенных в мире систем программирования Delphi, разработанной американской корпорацией Borland. Приводится неформальное знакомство с языком программирования и интегрированной средой разработчика. Подробно, на многочисленных примерах поясняются особенности использования языка программирования Delphi (Object Pascal). Рассматриваются компоненты общего назначения и программа в целом. Дается введение в программирование баз данных. Поясняются особенности программирования для Интернета. В книге сознательно не подчеркиваются различия многочисленных весий Delphi (на сегодня таких версий 7), так что она пригодна для изучения любой версии Delphi. На сопровождающей книгу дискете находятся исходные тексты всех примеров.
Автор: Валерий Фаронов
Опрос населения :)
Стоит ли устраивать встречи программистов в реале? (пирушки :)
Хокку дня
И разложив костер, Куда годы уходят - Не видно.
Афоризмы
Я говорю вам свое окончательное "может быть" (Сэмюэл Голдвин)
Фраза дня
Душа просит ананасов в шампанском, организм требует водки!
Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Миннесоте (США) вам грозит попасть в тюрьму за то, что вы спите голым.
В Аляске (США) запрещается (добавим -и не рекомендуется) будить медведей, чтобы их сфотографировать, а также, выбрасывать живых лосей из самолета.
И на закуску коротенький анекдот
Копчик - это маленький, очень маленький американский полицейский.