информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] WinApi Timer 11.09.02 22:27  
Автор: Bublik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Подскажите помощью каких апи функций можно засечь сколько времени выполнялось то или иное действие.
[Win32] WinApi Timer 18.09.02 21:02  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
LARGE_INTEGER liSearchStart,liSearchEnd,liCountsPerSec,liTotal;
if(!QueryPerformanceFrequency(&liCountsPerSec))
ERR
if(!QueryPerformanceCounter(&liSearchStart))
ERR
ptrMatchedElemPos = _find(dwResArraySize);
if(!QueryPerformanceCounter(&liSearchEnd))
ERR
liTotal.QuadPart = (liSearchEnd.QuadPart - liSearchStart.QuadPart)/(liCountsPerSec.QuadPart);
pos = (DWORD)(liTotal.QuadPart >> 32),(DWORD)liTotal.QuadPart& 0xFFFFFFFF);
Самый простой способ: GetTickCount(); 11.09.02 22:38  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
Самый простой способ: GetTickCount(): маленькое дополнение 12.09.02 12:43  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Простой, но его значение "плывет" в зависимости от числа задач, загруженности и т.д. и тики с точностью, равной установленной виндой частоты таймера.
а ты скажи у кого не плывет :) 12.09.02 14:34  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
> Простой, но его значение "плывет" в зависимости от числа
> задач, загруженности и т.д. и тики с точностью, равной
> установленной виндой частоты таймера.

На "железные" часики все равно сесть нельзя. На них уже OS сидит и задачи по ним планирует.
А для большинства задач вообще time() достаточно. Для кого не достаточно, тому GetTickCount() выше крыши.
Никто же, в конце концов не додумывается писать real time систему в многозадачной OS ;)
Самый надёжный вариант 13.09.02 08:54  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> На "железные" часики все равно сесть нельзя. На них уже OS
> сидит и задачи по ним планирует.
> А для большинства задач вообще time() достаточно. Для кого
> не достаточно, тому GetTickCount() выше крыши.
> Никто же, в конце концов не додумывается писать real time
> систему в многозадачной OS ;)

Так ведь человеку нужно знать время, и поточнее, между двумя событиями! Поэтому может подойти такой вариант — хоть и на железные часики сесть нельзя, но на процессорные тики можно. Более того, это очень точная штука, поскольку в секунду процессор выполняет миллионы (а в последнее время и миллиарды) простейших операций в секунду. Итак, суть следующая: практически все современные процессоры имеют машинную инструкцию rdtsc, которая заталкивает в регистровую пару 64-битное значение количества машинных тиков процессора с момента его включения, т.е. если вы считали это значение, а потом через секунду (примерно) считали новое значение, и процессор у вас имеет частоту 800 МГц, то вы увидите увеличение этого значения примерно на 800,000,000,000. По-моему, точнее не бывает. А количество тиков в секунду можно расчитать усреднённое за несколько выборок или же усреднять к общей сетке, поскольку скорости процессоров весьма дискретны (кто шарит в железе, может подсказать).

На дельфи можно написать вот такую функцию:
function GetCPUTimeStamp: Int64; register;
asm
  DW $310F
end;

---
Машинная инструкция rdtsc абсолютно свободно "разрешена к использованию" в пользовательских процессах защищённых OS.
И ещё один плюс — высокая скорость работы, поскольку это не вызов API. К тому же метод пригоден для измерения очень маленьких промежутков времени — к примеру, когда надо измерить скорость работы двух различных реализаций одной функции (чтобы выбрать наилучший), метод вполне пригоден.
[Win32] Спасибо 13.09.02 00:31  
Автор: Bublik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach