![]() |
Service & on Execute
Hi Delphianer
Ich spiele mich derzeit damit, einen Service zu erstellen. Ich habe ziemlich viel gelesen über Timer im onExecute Event. unter anderem folgendes: ![]() Gibt es eine "einfache" Möglichkeit einen Timer zu machen? Ich möchte prakitsch alle 5 Minuten ein paar dinge tun. Danke schon mal im Voraus. LG |
AW: Service & on Execute
TTimer ?
|
AW: Service & on Execute
hast du da ein gutes tutorial für mich?
|
AW: Service & on Execute
Ein Tutorial zu TTimer? Was soll da denn drinstehen, was nicht in dem von Dir verlinkten bereits gesagt wurde?
|
AW: Service & on Execute
Ich glaube du gehst da zu kompliziert dran. Platziere doch mal den TTimer auf deiner Form. Folgende Einstellungen sind nötig (OI oder Form Create)
Timer1.Enabled:=True; Timer1.Interval:=1000; im OnTimer Ereignis schreibst du jetzt ShowMessage('jede sekunde kommt diese Nachricht'); :thumb: |
AW: Service & on Execute
ShowMessage in einem Service ist aber nicht die beste Idee :zwinker:
|
AW: Service & on Execute
Ich wollte auch nicht sein Problem lösen, sondern zeigen wie einfach TTimer funktioniert :) Der Rest sollte alleine zu schaffen sein.
|
AW: Service & on Execute
im prinzip schaut das ja gut aus, aber ich verstehe nicht wie ich das im code verwende, sprich welche uses ich dazu benötige :(
|
AW: Service & on Execute
TTimer ist in ExtCtrls deklariert.
|
AW: Service & on Execute
Wenn du die Komponente auf die Form ziehst wird die Uses Clause automatisch erweitert.
Ansonsten kannst du auch manuell "ExtCtrls" einbinden und den Timer zur Laufzeit erstellen. |
AW: Service & on Execute
Dein Dienst hat auch so was wie eine Form (weiß und man kann die Hintergrundfarbe nicht anpassen). Da ziehst du den Timer aus der Komponentenleiste drauf. Der ist übrigens unter System (der erste Eintrag). Um die USES brauchst du dich nicht zu kümmern, das macht Delphi selbst. Dann noch ein paar Einstellungen (wie beschrieben) tätigen und - ganz wichtig - die Ereignisprozedur anlegen (entweder durch Doppelklick auf den Timer oder ... (du weißt schon). -> Fertig
Bernhard |
AW: Service & on Execute
Zitat:
|
AW: Service & on Execute
Zitat:
|
AW: Service & on Execute
Genau :) Beim speichern, was man natürlich sehr häufig macht, wird die uses Clause erweitert.
|
AW: Service & on Execute
Danke für die Antwort das klingt ja schon mal gut!!!
habe jetzt bei dem ServiceStart Event folgendes gemacht:
Delphi-Quellcode:
Im on Execute habe ich jetzt folgendes:
procedure Ttest.ServiceStart(Sender: TService; var Started: Boolean);
begin //Create LOGFILE createlog('test','C:\Temp'); test_time.Create(nil); test_time.Enabled := True; test_time.Interval := 60000; end;
Delphi-Quellcode:
NATÜRLICH bekomme ich da einen Fehler, was habe ich falsch gemacht? :(
procedure Ttest.ServiceExecute(Sender: TService);
begin while not terminated do begin if test_time.OnTimer = onTimer then begin // DO IT end; end; end; |
AW: Service & on Execute
Delphi-Quellcode:
test_time := TTimer.Create(nil);
test_time.Enabled := True; test_time.Interval := 60000; test_time.OnTimer := <Deine selbst geschriebene Methode vom Typ TNotifyEvent>; |
AW: Service & on Execute
ah ok
dh. bei test_time.ontime := <methode> ist der Timer erreicht?! setzt er ihn dann automatisch zurück? bzw. wie würde meine service execute dann aussehen? so oder:
Delphi-Quellcode:
procedure Ttest.ServiceExecute(Sender: TService);
begin while not terminated do begin test_time.OnTimer := <methode> end; test_time.Free; end; |
AW: Service & on Execute
:?::?:
Was hast Du eigentlich vor? |
AW: Service & on Execute
AUA. Sorry, aber ich würde dir an dieser Stelle ein Grundlagentutorial und eines für die Grundlagen von OOP mit Delphi empfehlen.
Du hast jetzt den Timer angelegt. Als weitere Eigenschaft musst du eine Prozedur erstellen (die natürlich eine Methode der Klasse sein muss (keine neue erstellen, du hast schon eine). Diese Prozedur weißt du dann Timer.OnTimer zu. Und dann entfernst du als nächstes mal ganz schnell die OnExecute-Prozedur aus deinem Dienst. Im Normalfall sollte man die nicht brauchen müssen. Bernhard |
AW: Service & on Execute
Was soll das eigentlich mit dem Timer?
der service hat ja nen Thread. Folgender Code piept jede sekunde:
Delphi-Quellcode:
Shalom
procedure Ttest.ServiceExecute(Sender: TService);
begin while not terminated do begin Beep; //Oder ruf hier DEINE Methode auf Sleep(1000); end; end; |
AW: Service & on Execute
die idee ist ja recht cool und simpel aber wenn ich zB 5 Minuten warte bis ich wieder etwas tue, kann der Dienst nicht beendet werden. Hängt sich beim beenden jedes mal auf.
Jemand ne Idee? PS: das einzige was ich vor habe ist, das ich zyklisch einen gewissen ablauf (Datenbankabfragen etc.) durchführe und danach ein paar minuten warte bis zum nächsten durchlauf |
AW: Service & on Execute
Für regelmäßige Aufgaben gibt es in Windows die "geplanten Tasks".
-> siehe Systemsteuerung Das sind einfache Programm/Skripte welche nach Regeln aufgerufen werden. z.B. mach mal alle 5 Minuten... Das ist auch viel einfacher, als einen Dienst oder ähnliches hinzustellen. |
AW: Service & on Execute
nur das ich eine delphi console app als Service laufen lassen muss....
|
AW: Service & on Execute
Hier noch ein simpler Vorschlag
nimm deinen timer, im timer dann:
Delphi-Quellcode:
Gruss alfold
Procedure Timer
begin inc(a); end; procedure Ttest.ServiceExecute(Sender: TService); begin while not terminated do begin if a >= 10 then begin Beep; //Oder ruf hier DEINE Methode auf a:= 0; end; end; end; |
AW: Service & on Execute
ach sch*** jetzt blick ich mich nicht durch...
kannst du mir das erklären damit ich das verstehe´?! :( |
AW: Service & on Execute
Wenn der Timer feuert, wird a um 1 erhöht. Hat a die 10 erreicht oder überschritten, wird ein Ton ausgegeben und a wieder auf 0 gesetzt, das Spiel beginnt also von vorn.
|
AW: Service & on Execute
ja aber wann wird er hier erhöht?
Delphi-Quellcode:
müsste man hiern icht irgendwo a := a + 1 einbauen?
procedure Ttest.ServiceExecute(Sender: TService);
begin while not terminated do begin if a >= 10 then begin Beep; //Oder ruf hier DEINE Methode auf a:= 0; end; end; end; |
AW: Service & on Execute
Zitat:
Delphi-Quellcode:
procedure Ttest.ServiceExecute(Sender: TService);
var c: Integer; begin c:= 0; while not terminated do begin inc(c); if c:= 60 then begin // ruf hier DEINE Methode auf c:= 0; end; Sleep(1000); end; end; |
AW: Service & on Execute
Nein zurückgesetzt!
Wenn der Timerinteval auf 1000 gleich (1sec) steht, wird jede sec a um 1 erhöht. (inc(a) entspricht a:=a+1;) Ergo wird ca alle 10 sec der beep ausgelöst oder das was du da machen willst. Dann wird a wieder auf 0 gesetzt. Nun dauert es wieder 10 sec und das spiel beginnt von vorn! Hat @DeddyH doch geschrieben , oder war es nicht verständlich:gruebel: Wenn es so ist, dann fehlen Dir aber die elementarsten Grundlagen. Gruss alfold |
AW: Service & on Execute
Da man einen Dienst nicht debuggen kann, würde ich mal empfehlen, zuerst eine Anwendung (mit graphischer Oberfläche) zu erstellen und dann mal alles zu implementieren, was du brauchst. Dann kannst du immer noch und ganz einfach alles in den Dienst reinkopieren und da du dir ja vorher sicher warst, dass es geht, geht es auch hinterher.
Zitat:
Bernhard |
AW: Service & on Execute
hm... naja meine fragen mögen blöd klingen, bin aber ein selbst lerner dh. ich hab das weder in der schule noch sonst wo gelernt.
Hab schon ziemlich viel gemacht mit datenbanken, xml usw usw. Einen Timer habe ich bis dato noch nie benötigt und einen Service schon gar nicht. ich finde die Sleep Methode einfach aber wie gesagt beim stoppen bekomme ich dann immer, das der Dienst nicht beendet werden kann, warscheinlich weil er sich in der sleep phase befindet oder? Deswegen werde ich wohl um einen Timer nicht rum kommen oder? ich verstehe das prinzip den Timer einzubauen, das ich jedoch nicht weiß ist, was ich den Timer bei ttest_timer.ontime := ???? mitgeben muss. das ist ja praktisch der moment an dem heruntergezählt wurde oder? |
AW: Service & on Execute
Dann klatsch doch einfach die Timer-Komponente auf dein Form. Dann einen Doppelklick drauf und dein Ereignis ist angelegt. Dann noch Intervall und Aktivität einstellen -> Fertig.
Ansonsten: Bei OnTimer muss der Name einer Prozedur rein, die du vorher angelegt hast. Bernhard |
AW: Service & on Execute
Zitat:
Wenn er so macht wie mit den Beep 8-) @value is Null! Bitte erst lesen, dann ausprobieren und wenn was nicht richtig geht wieder nachfragen! Das hilft Dir mehr, als nur fragen ohne auszuprobieren! Gruss alfold |
AW: Service & on Execute
^hm das mit dem timer drauf klatschen geht schon gut aber wie gesagt
ich weiß nicht wie ich das mit dem ontime in meinem onexecute event aufrufe |
AW: Service & on Execute
Wieso musst Du das Timer-Event im OnExecute aufrufen?
|
AW: Service & on Execute
Zitat:
Variable a: integer definieren, im Create setzten a:= 0; Doppelcklick auf die Timerkomponente und das reinschreiben was da steht mehr nicht! Gruss alfold |
AW: Service & on Execute
:wall::wall::wall::wall::wall::wall:
|
AW: Service & on Execute
Wenn du eine entsprechend neue Delphi-Version hast, kannst du das mit .OnTimer auch mit einer anonymen Funktion versuchen :mrgreen::mrgreen: :
Delphi-Quellcode:
Bernhard
Timer.OnTimer = procedure(Sender: TObject); begin Beep; end;
ADD: Zitat:
|
AW: Service & on Execute
@rollstuhlfahrer
Ich hätte noch 2 andere Ansätze, aber damit braucht man in diesem Thread gar nicht erst kommen. Zäääähhhh ....:roll: |
AW: Service & on Execute
îch steh trotzdem am schlauch :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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 by Thomas Breitkreuz