![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Снова о времени загрузки винды.
Layner © (2004-04-14 10:55:00)Получаю время GetTickCount, но это только до 49 суток, а потом снова с нуля, но как тогда WIn2000 показывает, что работает например 100 дней? Т.е. в этом случае есть наверняка ключь в реестре, где говорится сколько переиодов по 49 дней открыта винда? Если кто сталкивался с этим вопросом, подскажите плз.!
VMcL (2004-04-15 12:52:00) [1]>> Layner © (14.04.04 16:36) [8]
> Так то так, но GetTickCount до 49 дней инфу держит, а потом обнуляется
Для подсчета тактовой частоты CPUэтого хватит. А дальше уже используй RDTSC.
Layner (2004-04-14 16:36:00) [2]Так то так, но GetTickCount до 49 дней инфу держит, а потом обнуляется.. Кстати, скорость вычислил до герца, точность времени почти совпадает.
VMcL (2004-04-14 16:28:00) [3]>>Layner © (14.04.04 16:21) [6]
В теории, функции QueryPerformance*() могут не поддерживаться текущим железом. В таком случае для определения частоты CPU воспользуйся GetTickCount - не так точно, но всё равно неплохо.
Layner (2004-04-14 16:21:00) [4]А, понял, но запуск ОС, почти что запуск PC для меня, т.е. +-3 минуты на страшно, а за замер частоты с помощью этих ф-й, спасибо, воспользуюсь!
VMcL (2004-04-14 16:16:00) [5]И еще нюанс. RDSTC считает от запуска процессора, а не ОС.
VMcL (2004-04-14 16:14:00) [6]Точно 1,8? Может, например, Athlon XP 1.8?
Сделай универсально, а не только для твоего компа. Сначала с помощью RDSTC + QueryPerformanceCounter() + QueryPerformanceFrequency() замерь частоту CPU, потом используй.
Layner (2004-04-14 16:13:00) [7]ПРоверил, реальная частота, судя по программе Cpu-Z 1817,9 мегагерц, а как точно бы, из Delphi ее узнать :(
Layner (2004-04-14 15:59:00) [8]мастера, подскажите 2й момент, написал такой код с подачи VMcL (Спасибо!)
function GetCPUCount:int64; assembler;
asm
db 0fh,31h
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
d,H,M,Sec : integer;
tm : integer;
begin
Tm:=Round(GetCPUCount/1800000000); //моя частота проца, 1,8гиг
d:=Trunc(Tm/86400);
Tm:=Tm-d*86400;
H:=Trunc(Tm/3600);
Tm:=Tm-H*3600;
M:=Trunc(Tm/60);
Tm:=Tm-M*60;
Sec:=Trunc(Tm/1);
Edit1.Text:=IntToStr(d)+' '+IntToStr(h)+' '+IntToStr(m)+' '+IntToStr(Sec);
end;
Но есть расхождение с реальными часами, т.е. если машина работает 55 дней, 10 часов, то мой код кажет на 6 часов меньше. Может реальную частоту как то можно точно выставить, а не так, как я сейчас делаю, наугад...(1,8гиг, +,-, 2-3 килогерца)
VMcL (2004-04-14 11:24:00) [9]asm
RDTSC
end;
?