![]() |
Re: JCLCounter - High Performance Counter
Das heisst mein Testprogramm gibt nichts aus.
Ruf doch mal den Installer der JCL auf und installiere einfach erneut. Vielleicht hilft das ja. Der Installer hat auf jeden Fall kein Problem damit immer wieder aufgerufen zu werden. |
Re: JCLCounter - High Performance Counter
@ Robert:
Jo dein Programm gibt nix aus. Die QueryPerformanceFrequency(Freq) ist nicht NULL und auch QueryPerformanceCounter(time) gibt ein INT64 zurück. JCL hab ich bereits mehrfach installiert, deinstalliert und manuell installiert. immer das gleiche. furchtbar :stupid: |
Re: JCLCounter - High Performance Counter
Neueste Version? Evtl. haben ja ältere JCL-Versionen hier eine Wanze eingebaut?
|
Re: JCLCounter - High Performance Counter
Kopier doch mal JclCounter.pas, fuege es in dein Projekt ein, builde dein Programm und geh mit dem Debugger in den Konstruktor und schaue nach was dort passiert.
|
Re: JCLCounter - High Performance Counter
An dem Update für Windows liegt es nicht, bei mir geht alles. Mach dein Windows mal platt.
|
Re: JCLCounter - High Performance Counter
Zitat:
Wir sollten die Ursache schon finden. Windows-Update ändern teilweise Systemeinstellung (wurde bei mir für die Internetzone "Trusted Sides" auch wieder gemacht und das auch nicht bei jedem Anwender. |
Re: JCLCounter - High Performance Counter
Zusammenfassung bisheriger Ergebnisse
Funktioniert. Zeit kann gemessen werden ohne Probleme.
Delphi-Quellcode:
Auszug aus dem JCL Counter:
// Start
procedure HiPerfCounter.Start; begin try QueryPerformanceFrequency(freq); QueryPerformanceCounter(time1); except on E:Exception do begin ShowMessage('HiPerfCounter reported an Error. QueryPerformanceCounter is not supported.'); end; end; end; Funktioniert nicht, obwohl hier genau das gleiche passiert: QueryPerformanceFrequency(FFrequency) liefert NULL zurück. WIESO?
Delphi-Quellcode:
constructor TJclCounter.Create(const Compensate: Boolean); const Iterations: Integer = 10000; var Count: Integer; TmpOverhead: Int64; begin inherited Create; {$IFDEF MSWINDOWS} if not QueryPerformanceFrequency(FFrequency) then raise EJclCounterError.CreateRes(@RsNoCounter); {$ENDIF MSWINDOWS} {$IFDEF LINUX} FFrequency := 100000; // 1 sec = 10E6 microseconds, therefore we have to divide by 10E5 {$ENDIF LINUX} FCounting := False; FOverhead := 0; ...................... .......... |
Re: JCLCounter - High Performance Counter
Mal den PEViewer der JCL uebersetzen und auf die EXEs ansetzen, aber eigentlich sollten genau die gleichen Funktionen eingelinkt werden.
Alternativ die JVCL und JCL deinstallieren und loeschen und dann wirkich alle Files aus dem Delphi-Verzeichnisbaum loeschen die mit Jcl oder Jv beginnen. Danach die Festplatte absuchen ob nicht noch andere Files mit diesen Prefixen rumliegen. Moeglichst auch loeschen. Nun JVL und JVCL von ![]() ![]() |
Re: JCLCounter - High Performance Counter
@ Robert:
Ich habe soeben die JCLCounter.pas n bisschen editiert. Vor dem call: if not QueryPerformanceCounter(FStart) then habe ich ne Testvariable eingefügt: Test : bool. Und jetzt kommts: test := QueryPerformanceCounter(FStart); gibt NICHT null zurück und siehe da...der Counter geht wieder. Ich verstehs aber nicht. Nach dem entfernen der Var geths trotzdem. Ich vermute aber...das es nicht daran lag sondern an irgendwas anderem. So kanns nicht weitergehen...ich werde mal deine Schrittliste abarbeiten und den ganzen Kram entfernen.
Delphi-Quellcode:
procedure TJclCounter.Start;
var test : Boolean; begin test := QueryPerformanceCounter(FStart); FCounting := True; FElapsedTime := 0; FOverallElapsedTime := 0; {$IFDEF MSWINDOWS} if not QueryPerformanceCounter(FStart) then raise EJclCounterError.CreateRes(@RsNoCounter); {$ENDIF MSWINDOWS} {$IFDEF LINUX} GetTimeOfDay(FTimeval, nil); FStart := FTimeval.tv_sec * 100000 + (FTimeval.tv_usec); {$ENDIF LINUX} end; |
Re: JCLCounter - High Performance Counter
I think we've met the same problem some days ago with delphi 2006 and JCL and we just found a simple way to solve it : you have to change your compiler settings to align record data on 4 bytes.
For Delphi 2006, Go to Project => Options => Compiler => Code generation and look for the "Field Record Alignment" with a combobox with possible values : "0,1,2,4,8". You have to choose 4 (8 also seems to work) and recompile all your project I do not know for other Delphi versions but it should be quite similar IMHO PS : Sorry for writing in english on a german forum :(. I hope someone could translate it to others people here |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz