![]() |
AW: Service & on Execute
Kennst Du diesen Link bereits?
![]() |
AW: Service & on Execute
^ja den link kenne ich aber ich kann den Lösungsansatz momentan einfach nicht umsetzen
könnte mir jemand ein beispiel zeigen? |
AW: Service & on Execute
Einen Timer benötigst du in meinen Augen nicht wirklich,
![]() Möchtest du es mit einem zur Laufzeit erzeugten Timer machen musst du es so ähnlich machen:
Delphi-Quellcode:
Wenn du den Timer einfach auf dein Formular ziehst und die OnTimer-Prozedur über den OI einfügst kannst du dir das alles sparen.
// ...
procedure Ttest.TueWas(Sender:TObject); begin // das was du periodisch ausführen möchtest end; procedure Ttest.ServiceStart(Sender: TService; var Started: Boolean); begin test_time := TTimer.Create(nil); test_time.Enabled := True; test_time.Interval := 60000; test_time.OnTimer := TueWas; //damit definierst du welche Prozedur der Timer ausführen soll end; // ... Dennoch würde ich dir wie Deddy schon geschrieben hat zu weiteren Tutorials raten :) //Edit: Kann gut sein (bzw. ist sogar sehr wahrscheinlich :stupid:), dass der Code noch nicht ganz korrekt ist. Ich habe schon ne ganze Weile nichts mehr mit Delphi gemacht und auch grad keins zur Hand. Korrekturen, Verbesserungsvorschläge ausdrücklich erwünscht! //Edit2: Und da haben wir es schon :oops: Passt das jetzt so? |
AW: Service & on Execute
@Aurelius
der Betrag war Kontraproduktiv, da hier eine Methode und keine Prozedur benötigt wird. |
AW: Service & on Execute
Nunja,
Zitat:
|
AW: Service & on Execute
@DeddyH
ja, ich bewundere Deine Geduld bei diesem Thread, mir fehlt sie hier. Ohne Basics in die Wüste predigen das erinnert mich zu sehr an die Th*******9 Threads. |
AW: Service & on Execute
Liste der Anhänge anzeigen (Anzahl: 1)
So mal ein Beispiel: (AUSDRÜCKLICH: Nicht getestet)
Bernhard |
AW: Service & on Execute
Also ich habs gerade mal unter Windows 7 Ultimate 64Bit getestet und läuft.
|
AW: Service & on Execute
Zitat:
Aber ein DataModul kann man dafür auch sehr gut verwenden. Und zusätzlich hat man eine Klasse (die des Datamoduls), wo man seine Methoden drin unterbringen kann. |
AW: Service & on Execute
Zitat:
Start->Mit Prozess verbinden Prozess auswählen und los geht es! |
AW: Service & on Execute
Hm ich weiss das meine comments für Belustigung sorgen aber ich stehe wirklich am schlauch! :(
Was für Möglichkeiten gibt es denn noch? Kann ich mir die aktuelle zeit nicht in eine variable schreiben, 5 Minuten dazu adieren und im on execute Event die zeit Pollen ?! Oder würde das zu viele Ressourcen fressen? Lg |
AW: Service & on Execute
Es wurden doch bereits Lösungsmöglichkeiten aufgezeigt, sowohl mit Timer als auch mit Sleep.
|
AW: Service & on Execute
Du hast etliche Möglichkeiten, was gefällt Dir den nicht an dem Beispiel von Rollstuhlfahrer?
|
AW: Service & on Execute
Nun ja soweit ich das probiert habe komme ich mit sleep nicht weiter. Ich muss praktisch ein sleep von 5 Minuten einbauen dh der dienst ist ja zu diesem Zeitpunkt, also wenn er sich im sleep befindet, nicht zu bedienen besser gesagt nicht zu stoppen.
Die timer variante dürfte anscheinend die beste sein nur fehlt mir hierzu das Verständnis! Schliesslich muss ich den timer ja in der on execute procedure abfragen und das verstehe ich nicht ganz. Nur mal damit ich das verstehe: • timer := ttimer.create(Nil) • Timer.enanled := TRUE • und die Milisekunden Muss ich in der on Start procedure einbauen Beim on execute muss ich dann bei While not terminated das on time einbauen und dann in eine von mir definierte procedure übergehen oder?! Wäre die Möglichkeit welche ich oben beschrieben habe nicht auch möglich oder belaste ich den CPU zu sehr wenn ich im on execute Event meine startzeit variable permanent mit der aktuellen zeit vergleiche?! Lg |
AW: Service & on Execute
Nimm doch einfach eine globale Variable oder besser ein privates Feld Deines Dienstes und zähle es hoch. Du kannst dann sowohl aus dem Timer-Event als auch aus der Execute-Methode darauf zugreifen. Genau so wurde das in den Beispielen auch gemacht. Wo hapert es denn noch?
|
AW: Service & on Execute
Du musst gar nichts machen, hast Du Dir das Beispiel mal angeschaut, es ausprobiert?
Einfacher geht es kaum. Der Timer liegt auf dem "Form" Über Intervall im Objektinspektor legst Du die Millisekunden fest, nach denen der Timer selbsttätig die Methode aufruft die Du im Objektinspektor unter Ereignisse/OnTimer siehst. Wenn Du einen neuen Timer drauflegst auf Ereignisse/OnTimer doppelklicken und Du bist in der Quelltextansicht der neu erstellten Methode. Hier schreibst Du das rein was jedesmal nach Ablauf des Timerintervalls passieren soll..... |
AW: Service & on Execute
OMG jetzt kapier ich's, dh das zu machende wird dann in der procedure zb timer1time also die, die angelegt wird wenn ich doppelt drauf klicke.
Das heisst im on execute steht eigentlich nur timer.ontime := angelegte pricedure??!! Bitte sag das ich's kapiert habe :-D |
AW: Service & on Execute
@value is NULL : irgendwas macht mich stutzig:gruebel:
Habe mir mal ein paar anderen Post von Dir angschaut. Also so unbeholfen kannst Du ja nicht sein, das Du nicht mit dieser simplen Aufgabe klar kommst. Oder wie soll man sonst dieses vertsehen 'Du weist nicht wie ein timer funct/ wo soll ich was hinschreiben' etc. Hast du dafür ne Erklärung? |
AW: Service & on Execute
Wenn Du das per Objektinspektor machst, ist die Methode bereits dem Event zugewiesen. Eine händische Zuweisung ist normalerweise nur dann nötig, wenn man die Komponente erst zur Laufzeit erzeugt oder Methoden dynamisch (d.h. situationsabhängig) zuweisen möchte.
|
AW: Service & on Execute
Timer & Dienst keine gute Idee.
Wie wäre es mit Thread-Synchronistationstechniken. z.B. mit waitevent und einen Timeout? Bei beenden des Dienstes wird das Event geschickt, ansonsten lässt du das warten einfach in das Timeout laufen. So kann der Thread/Service sofort beendet werden oder er läuft einfach weiter. |
AW: Service & on Execute
@alfold
Unbeholfen bin ich nur in den dingen die ich noch nie gemacht habe! Ich habe ja vorhin gesagt das ich mir eigentlich das ganze selbst beibringe. Bis dato habe ich Konsolen apps gebastelt und viel mit XML und Datenbanken zu tun gehabt das geht schon ziemlich easy! Einen dienst habe ich bis dato noch nie erstellt, gut wenn das die Aufgabenstellung gewesen wäre dann hätte ich keinen thread eröffnen müssen den das schaffe ich auch so ;) aber das das mit dem timer brauchte ich noch nie! Wenn ich soetwas ähnliches gebraucht habe, habe ich mir immer die aktuelle zeit ausgelesen, 5 Minuten adiert, und in einer while schleife die aktuelle zeit verglichen. ABER wenn ich das bei einem Service mache geht mir die Maschine in die knie! Deswegen kommt es euch vielleicht so vor als ob ich euch nerven möchte aber ich Hab Delphi weser gelernt noch sonst was Tut mir leid falls ich Unruhe in dieses Forum bringe :( |
AW: Service & on Execute
Zitat:
Zitat:
Zitat:
Bernhard |
AW: Service & on Execute
Das weiße "Formular" nennt sich Datenmodul (wurde von himitsu bereits erwähnt) :zwinker:
|
AW: Service & on Execute
Zitat:
Nur wenn ich lese was Du schon alles gemacht hast(Programiert hast) und dann stollperst du über einen simplen Timer, den man nur draufpacken muss und doppelcklick dadrauf schon steht die Procedure, den rest da rein schreiben fertig. Dies haben die meisten Komponenten so ansich, mh... Egal, nun weist Du ja wie man es macht:wink: Gruss alfold |
AW: Service & on Execute
naja wie gesagt learning by doing ;)
ich würde das jetzt so machen:
Delphi-Quellcode:
is zwar kein timer aber schaut auch gut aus oder gibt es hier was einzuwenden?
procedure test.ServiceExecute(Sender: TService);
const seconds = 60; var Count: Integer; begin Count := 0; while not Terminated do begin Inc(Count); if Count >= seconds then begin Count := 0; //DO THE SPECIAL THINGS ;) end; Sleep(1000); ServiceThread.ProcessRequests(False); end; end; wenn ja bitte so erklären das ich es verstehe ;) wie ja alle schon gemerkt haben bin ich bzgl service etwas noobig ;) lg |
AW: Service & on Execute
Zitat:
Gruss alfold |
AW: Service & on Execute
ja kanns leider erst morgen mache deswegen hab ich mir gedacht ich schreibe das mal vielleicht hat ja jemand was auszusetzen ;) bzw. muss ich mir die ganze zeit den kopf zerbrechen.... das macht mich fertig ;)
lg edit: vorallem hab ich die timer komponente ja jetzt komplett weggelassen deshalb ;) |
AW: Service & on Execute
Zitat:
|
AW: Service & on Execute
programmers notepad ;)
hab delphi nur auf einem laptop und der liegt grad bei der freundin :/ |
AW: Service & on Execute
is jetzt nicht Dein ernst!
Da geben dir die User guten Code, den du einfach ignorierst. Klar, man kann es ja nicht ausprobieren! sprachlos und :wall: |
AW: Service & on Execute
nenene nicht da jetzt die worte umdrehen ;)
das was gepostet wurde habe ich ja bereits probiert, ABER die letzten X Beiträge befassen sich ja hauptsächlich mit der logik des ganzen. Wollte das ja verstehen und das habe ich ja jetzt, glaube ich. Und morgen gehts weiter mit probieren, schließlich war ich ja bis ca 19:30 am probieren nur jetzt gehts nich mehr :( alright ? ;) |
AW: Service & on Execute
Hi Leutz
Habe folgenden code heute getestet:
Delphi-Quellcode:
und er hat prima funktioniert!
procedure test.ServiceExecute(Sender: TService);
const seconds = 10; var Count: Integer; begin Count := 0; while not Terminated do begin Inc(Count); if Count >= seconds then begin Count := 0; addtolog(1, 'FIRE!'); end; Sleep(1000); ServiceThread.ProcessRequests(False); end; end;
Code:
LG
04.05.2011 08:54:50 [DEBUG] FIRE!
04.05.2011 08:55:00 [DEBUG] FIRE! 04.05.2011 08:55:10 [DEBUG] FIRE! 04.05.2011 08:55:20 [DEBUG] FIRE! 04.05.2011 08:55:30 [DEBUG] FIRE! 04.05.2011 08:55:40 [DEBUG] FIRE! 04.05.2011 08:55:50 [DEBUG] FIRE! 04.05.2011 08:56:00 [DEBUG] FIRE! Ich möchte mich bei allen für die Hilfe und Gedulg bedanken. Ich werd mir heute noch das Timer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 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