AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dienst: Auf herunterfahren/neustart des Systems reagieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst: Auf herunterfahren/neustart des Systems reagieren?

Ein Thema von DelphiPeter · begonnen am 18. Sep 2008 · letzter Beitrag vom 18. Sep 2008
 
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 15:22
Ich schätze mal, es geht prinzipiell darum, den Dienst sauber zu beenden. Unabhängig ob das durch ein manuelles Stoppen des Dienstes passiert oder durch Herunterfahren des Bestriebsystems...

Dafür sollte doch aber das OnStop Event zuständig sein, oder?

Ich hab schon lang keinen Dienst mehr in Delphi geschrieben, aber unter .NET sieht bei mir ein funktionierender Dienst so aus:

Der Dienst:
Code:
public partial class ImaService : ServiceBase
{
    public ImaService()
    {
        InitializeComponent();
    }

    private ThreadStart ts;
    private Thread t;
    private DeadLiner ima;

    protected override void OnStart(string[] args)
    {
        // TODO: Add code here to start your service.
        ima = new DeadLiner();
        ts = new ThreadStart(ima.Execute);
        t = new Thread(ts);
        t.Start();
    }

    protected override void OnStop()
    {
        // TODO: Add code here to perform any tear-down necessary to stop your service.
        //DeadLiner.isRunning = false;
        t.Abort();
        t.Join();
    }


}
OnStop wird aufgerufen, wenn der Dienst beendet wird. Die eigentliche Funktionalität des Dienstes wird in der DeadLiner Klasse in einem separatem Thread erledigt. Der Hauptteil sieht etwas so aus:

Code:
class DeadLiner
{
    public void Execute()
    {
        Init();

        try
        {
            while (true)
            {
                Check();
                Thread.Sleep(checkInterval*1000);
            }
        }
        catch (ThreadAbortException e)
        {
        }
        finally
        {
            Finish();
        }
    }

    private void Finish()
    {
        // TODO: Do some finalization stuff here

        log.Write("End");
        log.Stop();

        CloseConnections();
    }
}
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 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