Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Datasnap Server mit Timer? (https://www.delphipraxis.net/180776-datasnap-server-mit-timer.html)

Koloss 17. Jun 2014 10:13

Datasnap Server mit Timer?
 
Wiedermal ganz einfaches Beispiel, Datasnap Server mit Assistenten und einen Timer reingeleg!
Ich komme nicht in den Timer Event hinein, wo liegt das Problem?
Für die Frage warum ich da einen Timer möchte, weil ich von wo anderes für diesen Client Daten hole!


Delphi-Quellcode:
unit ServerMethodsUnit1;

interface

uses System.SysUtils, System.Classes, System.Json,
    Datasnap.DSServer, Datasnap.DSAuth, DataSnap.DSProviderDataModuleAdapter,
  Vcl.ExtCtrls;

type
  TServerMethods1 = class(TDSServerModule)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure DSServerModuleCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
  end;

implementation


{$R *.dfm}


uses System.StrUtils;

procedure TServerMethods1.DSServerModuleCreate(Sender: TObject);
begin

end;

function TServerMethods1.EchoString(Value: string): string;
begin
  Result := Value;
end;

function TServerMethods1.ReverseString(Value: string): string;
begin
  Result := System.StrUtils.ReverseString(Value);
end;

procedure TServerMethods1.Timer1Timer(Sender: TObject);
begin
  Tag := 5; // Da komme ich nicht rein, wieso den nicht?
end;

mkinzler 17. Jun 2014 10:19

AW: Datasnap Server mit Timer?
 
Ein Server bekommt eine Anfrage und antwortet auf diese. Für was benötigst Du einen Timer?

Koloss 17. Jun 2014 10:20

AW: Datasnap Server mit Timer?
 
Ich hole zyklisch Daten von einen anderen Server!

Der schöne Günther 17. Jun 2014 10:24

AW: Datasnap Server mit Timer?
 
Ich kenne mich mit Windows und Services nicht aus, aber ich meine doch, der Timer ist doch letzten Ende über Windows-Messages realisiert.
Delphi-Quellcode:
WM_TIMER
oder so wahrscheinlich.

Und diese Message braucht wahrscheinlich ein Fenster? Hat dein Server überhaupt eins? Was für komische Dinge sind zu beachten wenn eine Anwendung vom Benutzer "System" ausgeführt wird?

Ich bin besser still. Aber ich würde mal schauen nach Timer und Konsolenanwendung. Ich meine ein Timer braucht so unbedingt ein Fenster.

Ansonsten wenn du Daten holen willst, mach doch einfach einen Hintergrund-Thread der solange schläft, Daten holt, wieder schläft...

Koloss 17. Jun 2014 10:30

AW: Datasnap Server mit Timer?
 
Ich habe den Timer ganz normal raufgelegt auf das TDSServerModule.

Ja, ein Timer braucht Windows Messages das weis ich, aber wieso erlaubt mir Delphi den Timer raufzulegen?
Mein Server hat ein Fenster und ist keine Konsolenanwendung.

Das Problem mit den Thread ist dann wieder das man ihn schützen muss!

mkinzler 17. Jun 2014 10:38

AW: Datasnap Server mit Timer?
 
Und warum?

Photoner 17. Jun 2014 10:48

AW: Datasnap Server mit Timer?
 
Jetzt mal ganz simpel a la "haben Sie überprüft ob das Kabel eingesteckt ist?" :

Ist der Timer gestartet?
Delphi-Quellcode:
Timer1.Enabled := True

Koloss 17. Jun 2014 10:52

AW: Datasnap Server mit Timer?
 
:-D :thumb:

himitsu 17. Jun 2014 15:00

AW: Datasnap Server mit Timer?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1262574)
aber ich meine doch, der Timer ist doch letzten Ende über Windows-Messages realisiert.
Delphi-Quellcode:
WM_TIMER
oder so wahrscheinlich.

Ja ist es.

Aber da damals keiner eine umständliche Behandlung der Timer-IDs implementieren wollte, erstellt sich TTimer immer selber ein MessageOnlyWindow im Hintergrund und registriert sich darauf, mit der ID 0.
Also das Fenster ist somit immer da.

Außerdem müsste sich so der TTimer über seinen Owner erst ein Parent-Window suchen und dort aufpassen ob und welche anderen TTimer es gibt, um sich eine eigene ID zu berechnen. (wobei es keine Möglichkeit gibt, beim Windows anzufragen, ob eine ID belegt ist, z.B. durch einen direkten API-Aufruf)
Ach ja, das WM_TIMER kommt dann natürlich beim Parent-Control (z.B. der Form) an und nicht bei der TTimer-Komponente, weswegen man dann entweder das Event in alle möglichen Parentcontrols implementieren müsste, oder Dieses "umständlich" hooken müsste, um an das Event ranzumommen.
Und was ist mit dynmaischen Timern, welche einen Owner besitzen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz