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