![]() |
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; |
AW: Datasnap Server mit Timer?
Ein Server bekommt eine Anfrage und antwortet auf diese. Für was benötigst Du einen Timer?
|
AW: Datasnap Server mit Timer?
Ich hole zyklisch Daten von einen anderen Server!
|
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:
oder so wahrscheinlich.
WM_TIMER
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... |
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! |
AW: Datasnap Server mit Timer?
Und warum?
|
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
|
AW: Datasnap Server mit Timer?
:-D :thumb:
|
AW: Datasnap Server mit Timer?
Zitat:
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 01:04 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