![]() |
Delphi-Version: 10 Seattle
Thread arbeitet schneller wenn IDE aktiv ist. Warum?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich habe folgenden Thread um mich etwas in die Thematik einzuarbeiten:
Delphi-Quellcode:
Das Seltsame:
type
TValues = Class dtTime : TDateTime; rForce, rTemperature, rHumidity : Real; End; var Form1: TForm1; threadList1 : TThreadList; ... procedure TForm1.FormCreate(Sender: TObject); begin threadList1 := TThreadList.Create; end; procedure TForm1.Button2Click(Sender: TObject); begin if (mythreadRunning = FALSE) then begin mythreadRunning:= TRUE; secondProcess := TMyThread.Create(True); { Create suspended--secondProcess does not run yet. } secondProcess.FreeOnTerminate := True; { You do not need to clean up after termination. } secondProcess.Priority := tpNormal; // Set the priority to lower than normal. secondProcess.Resume; { Now run the thread. } end else MessageDlg('This thread is still running. You are going to hurt yourself!', mtInformation, [mbOk], 0); end; procedure TMyThread.Execute; var Values: TValues; begin while(True) do begin if (Terminated) then begin mythreadRunning:= FALSE; exit; end; globalCount:= globalCount + 1; Values := TValues.Create; Values.dtTime := now; Values.rForce := globalCount; Values.rTemperature := globalCount/3; Values.rHumidity := globalCount/7; threadList1.Add(Values); Sleep(10); end; mythreadRunning:= FALSE; end;
Hat jemand eine Erklärung? Danke Gerd |
AW: Thread arbeitet schneller wenn IDE aktiv ist. Warum?
Das liegt daran, dass die IDE die Timer Resolution von Windows erhöht. Dadurch arbeitet
Delphi-Quellcode:
bei sehr kleinen Werter genauer. Siehe auch
Sleep
![]() |
AW: Thread arbeitet schneller wenn IDE aktiv ist. Warum?
Habe mir die Kommentare in dem Link angeschaut und dann die SleepTime variabell gemacht.
Ergebnis: Egal ob Sleep(1) oder Sleep(15) => Ist war 15-16 ms ab 16 waren es dann 30-31 ms Gibt es eine Möglichkeit die erhöhte Auflösung von Delphi beizubehalten? |
AW: Thread arbeitet schneller wenn IDE aktiv ist. Warum?
Selbst timeBeginPeriod aufrufen?
Oder gar nicht Sleep benutzen und die Zeit selbst verwalten. |
AW: Thread arbeitet schneller wenn IDE aktiv ist. Warum?
Ja, OK. Hätte noch weiter nach dem
Delphi-Quellcode:
schauen sollen.
timeBeginPeriod
|
AW: Thread arbeitet schneller wenn IDE aktiv ist. Warum?
Siehe
![]() Nach der Änderung mit ClockRes kann man es mit folgendem Code überprüfen:
Delphi-Quellcode:
program SystemTimeAdjustment;
{$APPTYPE CONSOLE} uses // SysUtils, windows; System.SysUtils, Winapi.Windows; var a,b:DWORD; c:bool; begin GetSystemTimeAdjustment(a,b,c); WriteLn('System time adjustment: '+FloatToStr(b / 10000)+' ms'); WriteLn; Writeln('Press any key...'); Readln; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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