Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Внизскока тиков отработал комп Найти похожие ветки
← →
redlord (2005-03-07 00:22) [0]помню что в модуле MMSYSTEM есть вункция возвращающая тики времени которое винда отработала. а как она называется забыл, поскажите уж не сочтите за труд
← →
SammIk © (2005-03-07 00:24) [1]GetTickCount
rdtsc db 0fh,31h
← →
Palladin © (2005-03-07 00:27) [2]Замучили
unit UWRTickers;
interface
Type
TTicker=Class
Private
m_nFreq,
m_nStartValue,
m_nLastTickValue,
m_nLastTickCount,
m_nNowTickValue,
m_nTickCount:Int64;
Function lcGetLastTickTime:Extended;
Function lcGetAllTime:Extended;
Function lcGetAvgTickTime:Extended;
Public
Constructor Create;
Procedure Reset; Virtual;
Procedure Tick(p_nCount:Integer=1); Virtual;
Property LastTickTime:Extended Read lcGetLastTickTime;
Property AllTime:Extended Read lcGetAllTime;
Property AvgTickTime:Extended Read lcGetAvgTickTime;
End;
TWindowsTicker=Class(TTicker)
Public
Procedure Reset; Override;
Procedure Tick(p_nCount:Integer=1); Override;
End;
TPerfomanceCounterTicker=Class(TTicker)
Public
Procedure Reset; Override;
Procedure Tick(p_nCount:Integer=1); Override;
End;
Function CreateBestTicker:TTicker;
implementation
Uses
Windows;
Procedure TTicker.Tick;
Begin
m_nLastTickValue:=m_nNowTickValue;
m_nLastTickCount:=m_nTickCount;
m_nTickCount:=m_nTickCount+p_nCount;
End;
Constructor TTicker.Create;
Begin
Reset;
End;
Procedure TTicker.Reset;
Begin
m_nLastTickValue:=m_nStartValue;
m_nNowTickValue:=m_nStartValue;
m_nLastTickCount:=0;
m_nNowTickValue:=0;
m_nTickCount:=0;
End;
Function TTicker.lcGetLastTickTime;
Begin
If m_nFreq=0 Then Result:=0 Else
If m_nLastTickCount=0 Then Result:=0 Else Result:=(m_nNowTickValue-m_nLastTickValue)/m_nFreq/m_nLastTickCount;
End;
Function TTicker.lcGetAllTime;
Begin
If m_nFreq=0 Then Result:=0
Else Result:=(m_nNowTickValue-m_nStartValue)/m_nFreq;
End;
Function TTicker.lcGetAvgTickTime;
Begin
If m_nFreq=0 Then Result:=0 Else
If m_nTickCount=0 Then Result:=0 Else Result:=(m_nNowTickValue-m_nLastTickValue)/m_nFreq/m_nTickCount;
End;
Procedure TWindowsTicker.Reset;
Begin
m_nFreq:=1000;
m_nStartValue:=GetTickCount;
Inherited;
End;
Procedure TWindowsTicker.Tick;
Begin
Inherited;
m_nNowTickValue:=GetTickCount;
End;
Procedure TPerfomanceCounterTicker.Reset;
Begin
QueryPerformanceFrequency(m_nFreq);
QueryPerformanceCounter(m_nStartValue);
Inherited;
End;
Procedure TPerfomanceCounterTicker.Tick;
Begin
Inherited;
QueryPerformanceCounter(m_nNowTickValue);
End;
Function CreateBestTicker:TTicker;
Var
n:Int64;
Begin
If Not QueryPerformanceFrequency(n) Then Result:=TWindowsTicker.Create
Else Result:=TPerfomanceCounterTicker.Create;
End;
end.
← →
redlord (2005-03-07 00:29) [3]ok GetTickCount
← →
Kolan © (2005-03-07 00:36) [4]
> Palladin © (07.03.05 00:27) [2]
Вот так всегда. Зря постил :(
> ok GetTickCount
← →
Palladin © (2005-03-07 00:41) [5]В общем то не зря. Есть "тихме посетители". Для себя много извелкут в приведенном выше. Есть много полезного.
← →
тихий_посетитель (2005-03-07 00:58) [6]Да, не зря. Когда-то стояла передо мной похожая задача - не помню, как извратился. А эту ветку я уже минут 20 как сохранил - моить, понадобится.
---
Умный не должен все знать - он должен знать, где это "все" можно найти (не поручусь за дословность)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c