Einzelnen Beitrag anzeigen

JohannesK

Registriert seit: 17. Jul 2003
Ort: Abtwil
118 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Unterschiede TTimer zwischen Delphi 7 und 2010?

  Alt 7. Jul 2015, 15:47
Die Timer werden eingeschaltet sobald die gesamten Gruppen ferig definiert sind damit nicht ein timer in eine unfertige Definition reinfunkt.
Delphi-Quellcode:

  savetimer := TSavetimer.create(dm.uniconn, server.OPCGroups[i]);
  savetimer.Name := server.OPCGroups[i].Parent.Name + '_' + server.OPCGroups[i].Name;
  savetimer.GroupNo := strtoint(rightstr(server.OPCGroups[i].Name, length(server.OPCGroups[i].Name)-2));
  itdata := server.OPCGroups[i].opcitems[0].data;

  savetimer.SInterval := itdata^.intervall;
  savetimer.RInterval := itdata^.ReadIntervall;
  savetimer.AInterval := itdata^.LimitIntervall;

  savetimer.STimer.Interval := savetimer.SInterval;
  savetimer.RTimer.Interval := 30000;

  savetimer.Stimer.Enabled := true;
  savetimer.Rtimer.Enabled := true;
Wie gesagt, der Code ist identisch mit dem in D7,am Ende der ganzen Aufruferei ist der Status enabled bei beiden Timern = true.
Das manuelle Aufrufen der Prozedur SaveTimerEvent funktioniert auch ohne Fehler.

@Photoner: Der Savethread braucht ein paar millisekunden und wird jedesmal wieder freigegeben (siehe hier):
Delphi-Quellcode:
procedure TSavetimer.SaveTimerEvent(sender: TObject);
var tr: TSaveThread;
begin
   try
      tr := TSaveThread.Create(self);
      tr.FreeOnTerminate := false;
      tr.execute;
      repeat sleep(10) until tr.Terminated;
      tr.Free;
     except
       //
     end;
end;
mit freundlichem Gruss

So einfach wie möglich. Aber nicht einfacher.

Geändert von JohannesK ( 7. Jul 2015 um 15:52 Uhr)
  Mit Zitat antworten Zitat