Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Service & on Execute (https://www.delphipraxis.net/160218-service-execute.html)

DeddyH 3. Mai 2011 15:56

AW: Service & on Execute
 
Kennst Du diesen Link bereits? http://www.delphi-treff.de/tutorials/grundlagen/

value is NULL 3. Mai 2011 16:04

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?

Aurelius 3. Mai 2011 16:08

AW: Service & on Execute
 
Einen Timer benötigst du in meinen Augen nicht wirklich, http://www.delphipraxis.net/1098601-post28.html tuts eigentlich auch sehr gut.

Möchtest du es mit einem zur Laufzeit erzeugten Timer machen musst du es so ähnlich machen:
Delphi-Quellcode:
// ...
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;
// ...
Wenn du den Timer einfach auf dein Formular ziehst und die OnTimer-Prozedur über den OI einfügst kannst du dir das alles sparen.

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?

Bummi 3. Mai 2011 16:11

AW: Service & on Execute
 
@Aurelius

der Betrag war Kontraproduktiv, da hier eine Methode und keine Prozedur benötigt wird.

DeddyH 3. Mai 2011 16:15

AW: Service & on Execute
 
Nunja,
Zitat:

Zitat von Bummi (Beitrag 1098625)
:wall::wall::wall::wall::wall::wall:

ohne weiteren Text ist auch nicht gerade ein Beispiel für Produktivität :roll:

Bummi 3. Mai 2011 16:19

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.

rollstuhlfahrer 3. Mai 2011 16:20

AW: Service & on Execute
 
Liste der Anhänge anzeigen (Anzahl: 1)
So mal ein Beispiel: (AUSDRÜCKLICH: Nicht getestet)

Bernhard

MephistoMyRo 3. Mai 2011 16:37

AW: Service & on Execute
 
Also ich habs gerade mal unter Windows 7 Ultimate 64Bit getestet und läuft.

himitsu 3. Mai 2011 17:50

AW: Service & on Execute
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1098611)
Dann klatsch doch einfach die Timer-Komponente auf dein Form.

Service und Form paßt nicht ganz ... ist das gleiche, wie mit dem schon genannten ShowMessage.

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.

omata 3. Mai 2011 17:59

AW: Service & on Execute
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1098606)
Da man einen Dienst nicht debuggen kann...

Wieso kann man einen Dienst nicht debuggen?

Start->Mit Prozess verbinden Prozess auswählen und los geht es!

value is NULL 3. Mai 2011 18:05

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

DeddyH 3. Mai 2011 18:09

AW: Service & on Execute
 
Es wurden doch bereits Lösungsmöglichkeiten aufgezeigt, sowohl mit Timer als auch mit Sleep.

Bummi 3. Mai 2011 18:10

AW: Service & on Execute
 
Du hast etliche Möglichkeiten, was gefällt Dir den nicht an dem Beispiel von Rollstuhlfahrer?

value is NULL 3. Mai 2011 18:20

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

DeddyH 3. Mai 2011 18:22

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?

Bummi 3. Mai 2011 18:28

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.....

value is NULL 3. Mai 2011 18:37

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

alfold 3. Mai 2011 18:41

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?

DeddyH 3. Mai 2011 18:43

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.

generic 3. Mai 2011 18:52

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.

value is NULL 3. Mai 2011 18:53

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 :(

rollstuhlfahrer 3. Mai 2011 19:20

AW: Service & on Execute
 
Zitat:

Zitat von himitsu (Beitrag 1098656)
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1098611)
Dann klatsch doch einfach die Timer-Komponente auf dein Form.

Service und Form paßt nicht ganz ... ist das gleiche, wie mit dem schon genannten ShowMessage.

Mir ist klar, dass das, was ein Dienst hat, kein Form ist. Es mangelt mir nur am Namen. Außerdem habe ich in einem Beitrag davor schon darüber gesprochen, dass es einen weißen Hintergrund hat (und somit eigentlich nicht zu verfehlen sein sollte).

Zitat:

Zitat von omata (Beitrag 1098661)
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1098606)
Da man einen Dienst nicht debuggen kann...

Wieso kann man einen Dienst nicht debuggen?

Start->Mit Prozess verbinden Prozess auswählen und los geht es!

Dann muss ich bei mir immer wieder was falsch machen, dass es ausgerechnet bei mir nicht geht. Zudem kommt da noch der klitzekleine Unterschied zwischen System-Prozess und Delphi auf Benutzerebene. Es könnte (will Windows jetzt dafür nicht anschmeißen) sogar sein, dass das Rechte-mäßig gar nicht klappt (Edit: es geht, aber ohne Pascal-Code) und wenn es klappen sollte, kommt bei mir immer nur das CPU-Fenster wo kein Delphi-Code drin ist (den hab ich da nämlich noch nicht gefunden, werde es aber gerne nochmal versuchen).


Zitat:

Zitat von value is NULL (Beitrag 1098686)
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!

Sag mal, funktioniert mein Beispiel jetzt etwa doch nicht oder hast du es noch gar nicht ausprobiert? - Und für Warte-Probleme gibt es in der Code-Lib das Delay von negaH, welches alle Probleme umgehen sollte (-> CPU-Auslastung oder nicht-Reaktion von Anwendungen).


Bernhard

DeddyH 3. Mai 2011 19:27

AW: Service & on Execute
 
Das weiße "Formular" nennt sich Datenmodul (wurde von himitsu bereits erwähnt) :zwinker:

alfold 3. Mai 2011 19:28

AW: Service & on Execute
 
Zitat:

Zitat von value is NULL (Beitrag 1098686)
...Tut mir leid falls ich Unruhe in dieses Forum bringe :(

ne ist es ja nicht:wink:
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

value is NULL 3. Mai 2011 20:19

AW: Service & on Execute
 
naja wie gesagt learning by doing ;)

ich würde das jetzt so machen:

Delphi-Quellcode:
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;
is zwar kein timer aber schaut auch gut aus oder gibt es hier was einzuwenden?
wenn ja bitte so erklären das ich es verstehe ;) wie ja alle schon gemerkt haben bin ich bzgl service etwas noobig ;)

lg

alfold 3. Mai 2011 21:05

AW: Service & on Execute
 
Zitat:

Zitat von value is NULL (Beitrag 1098703)
naja wie gesagt learning by doing ;)
ich würde das jetzt so machen:
...

Machen und ausprobieren, wenn es funct ist gut, wenn nicht, noch mal nachfragen:wink:

Gruss alfold

value is NULL 3. Mai 2011 21:10

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 ;)

alfold 3. Mai 2011 21:23

AW: Service & on Execute
 
Zitat:

Zitat von value is NULL (Beitrag 1098724)
ja kanns leider erst morgen mache deswegen hab ich mir gedacht ich schreibe das mal ..

ähm wie jetzt, Du schreibst Code mit nem Texteditor oder wie soll ich das jetzt vestehn :gruebel:

value is NULL 3. Mai 2011 21:25

AW: Service & on Execute
 
programmers notepad ;)

hab delphi nur auf einem laptop und der liegt grad bei der freundin :/

alfold 3. Mai 2011 21:35

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:

value is NULL 3. Mai 2011 21:39

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 ? ;)

value is NULL 4. Mai 2011 09:31

AW: Service & on Execute
 
Hi Leutz

Habe folgenden code heute getestet:

Delphi-Quellcode:
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;
und er hat prima funktioniert!

Code:
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!
LG

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.
Seite 2 von 2     12   

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