Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#1

Thread arbeitet schneller wenn IDE aktiv ist. Warum?

  Alt 20. Jan 2017, 09:11
Delphi-Version: 10 Seattle
Hallo zusammen,

ich habe folgenden Thread um mich etwas in die Thematik einzuarbeiten:

Delphi-Quellcode:
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;
Das Seltsame:
  • Starte ich das Programm mit F9 in der Delphi IDE sehe ich anhand des Zeitstempels dass die Daten im 0.010 - 0.011s Intervall erzeugt werden
  • Starte ich die EXE bei laufender IDE im Explorer, werden die Daten ebenfalls im 0.010 - 0.011s Intervall erzeugt
  • Sobald ich Delphi beende erhöht sich der Intervall auf 0.015 -0.016s
  • Auch wenn ich die EXE ohne laufendes Delphi starte ist der Intervall 0.015 -0.016s
  • Dabei spielt es keine Rolle ob ich die EXE im DEBUG- oder om RELEASE-Mode erstellt habe.
  • Um sicher zu gehen, dass es nicht bei der Anzeige zu Nebeneffekte kommte, lasse ich mir die Daten erst anzeigen wenn der Erzeuger-Thead pausiert ist

Hat jemand eine Erklärung?

Danke
Gerd
Miniaturansicht angehängter Grafiken
threadtime.jpg  
  Mit Zitat antworten Zitat