|
Тема
|
Pentium 4 i Delphi 7.0 problem?
|
|
Автор |
Vermax (киликанзер) |
Публикувано | 26.05.06 13:47 |
|
Имам си една програмка, която не е нищо особено. 2 формички които се създават още в началото на приложението и после едната "управлява другата" (визуализира я и я скрива). По-нататък ако е необходимо ще пиша и какви компоненти използвам(Подозирам JVCL компонента, но не искам да ви влияя)
Имам следния проблем: това софтуерче се билдва и тръгва на Пентиум Селерон 2.4 обаче сминих машината на Пентиум 4 на 3.0 МHz(и на двете е едно и също XP proffesional). На новата конфигурациика се билдва без проблеми, но като тръгва дава DIVISION BY ZERO и то го дава още преди Аpplication.Initialize;
98% съм сигурен че е от някоя крива компонента,но все пак да попитам, някой имал ли е този проблем?
| |
Тема
|
Re: Pentium 4 i Delphi 7.0 problem?
[re: Vermax]
|
|
Автор |
Vermax (киликанзер) |
Публикувано | 26.05.06 14:38 |
|
Мдааа в JVCL версия 2.10 се оказаха проблемите, просто хората в 2003-та година не са предвидили че може да има толкова бързи процесори . Т как се смята бързина на процесор :) :
Unit e JclSysInfo
...
function GetCPUSpeed(var CpuSpeed: TFreqInfo): Boolean;
var
T0, T1: TULargeInteger;
CountFreq: TULargeInteger;
Freq, Freq2, Freq3, Total: Integer;
TotalCycles, Cycles: Int64;
Stamp0, Stamp1: Int64;
TotalTicks, Ticks: Cardinal;
Tries, Priority: Integer;
Thread: THandle;
begin
Stamp0 := 0;
Stamp1 := 0;
Freq := 0;
Freq2 := 0;
Freq3 := 0;
Tries := 0;
TotalCycles := 0;
TotalTicks := 0;
Total := 0;
Thread := GetCurrentThread();
Result := QueryPerformanceFrequency(Int64(CountFreq));
if Result then
begin
while ((Tries < 3 ) or ((Tries < 20) and ((Abs(3 * Freq - Total) > 3) or
(Abs(3 * Freq2 - Total) > 3) or (Abs(3 * Freq3 - Total) > 3)))) do
begin
Inc(Tries);
Freq3 := Freq2;
Freq2 := Freq;
QueryPerformanceCounter(Int64(T0));
T1.LowPart := T0.LowPart;
T1.HighPart := T0.HighPart;
Priority := GetThreadPriority(Thread);
if Priority <> THREAD_PRIORITY_ERROR_RETURN then
SetThreadPriority(Thread, THREAD_PRIORITY_TIME_CRITICAL);
try
while (T1.LowPart - T0.LowPart) < 50 do
begin
QueryPerformanceCounter(Int64(T1));
Stamp0 := ReadTimeStampCounter;
end;
T0.LowPart := T1.LowPart;
T0.HighPart := T1.HighPart;
while (T1.LowPart - T0.LowPart) < 1000 do
begin
QueryPerformanceCounter(Int64(T1));
Stamp1 := ReadTimeStampCounter;
end;
finally
if Priority <> THREAD_PRIORITY_ERROR_RETURN then
SetThreadPriority(Thread, Priority);
end;
Cycles := Stamp1 - Stamp0;
Ticks := T1.LowPart - T0.LowPart;
Ticks := Ticks * 100000;
Ticks := Round(Ticks / (CountFreq.LowPart / 10));
//по някое време тук ticks става нула нещата заорават, а става нула е доста //бърз и им стават криви сметките...
TotalTicks := TotalTicks + Ticks;
TotalCycles := TotalCycles + Cycles;
Freq := Round(Cycles / Ticks);
Total := Freq + Freq2 + Freq3;
end;
Freq3 := Round((TotalCycles * 10) / TotalTicks);
Freq2 := Round((TotalCycles * 100) / TotalTicks);
if Freq2 - (Freq3 * 10) >= 6 then
Inc(Freq3);
CpuSpeed.RawFreq := Round(TotalCycles / TotalTicks);
CpuSpeed.NormFreq := CpuSpeed.RawFreq;
Freq := CpuSpeed.RawFreq * 10;
if (Freq3 - Freq) >= 6 then
Inc(CpuSpeed.NormFreq);
CpuSpeed.ExTicks := TotalTicks;
CpuSpeed.InCycles := TotalCycles;
CpuSpeed.NormFreq := RoundFrequency(CpuSpeed.NormFreq);
Result := True;
end;
end;
| |
|
Помните ли Borland Pascal 7?
| |
Тема
|
Re: Pentium 4 i Delphi 7.0 problem?
[re: Vermax]
|
|
Автор |
Vermax (киликанзер) |
Публикувано | 26.05.06 20:27 |
|
Това ме накара да си спомня за стария Борланд Паскал 7 и мястото на CRT библиотеката в uses клаузата
| |
|
|
|
|