AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Softwareentwicklung im Allgemeinen Projektplanung und -Management Wie kann man ein Programm im Hintergrund ablaufen lassen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann man ein Programm im Hintergrund ablaufen lassen?

Ein Thema von Chemiker · begonnen am 3. Jun 2015 · letzter Beitrag vom 4. Jun 2015
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#1

AW: Wie kann man ein Programm im Hintergrund ablaufen lassen?

  Alt 3. Jun 2015, 21:48
Man kann natürlich auch ein VCL-Programm ohne oder mit unsichtbarem Fenster laufen lassen (Ersteres ist nur ein bissl "gehackt"),
aber die Dienste/Services werden nicht umsonst öfters auch mal "Hintergrunddienst" genannt, weil sie halt im Hintergrund laufen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Wie kann man ein Programm im Hintergrund ablaufen lassen?

  Alt 3. Jun 2015, 22:59
Nur ein Dienst wird keine Windows Fensternachrichten empfangen können. Fensternachrichten sind an einen Desktop gebunden. Und ein Dienst läuft in einer anderen WindowsStation.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Wie kann man ein Programm im Hintergrund ablaufen lassen?

  Alt 3. Jun 2015, 23:04
Wenn ich das richtig verstanden hatte, gehören Fensternachrichten doch gar nicht zu den Anforderungen des TE:

"... im Hintergrund laufen und Daten von eine serielle Schnittstelle entgegennehmen. Die Daten sollen kurz geprüft und mit einem Zeitstempel versehen werden und dann zu einem Firebird-Server über ein Netzwerkverbindung geschickt ..."

Oder braucht man für den Empfang von Daten einer seriellen Schnittstelle Fensternachrichten?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Wie kann man ein Programm im Hintergrund ablaufen lassen?

  Alt 3. Jun 2015, 23:12
Zweiter Absatz:
Zitat:
aber für die serielle Schnittstelle muss ich Windows-Botschaften auswerten können
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie kann man ein Programm im Hintergrund ablaufen lassen?

  Alt 4. Jun 2015, 00:01
Vermutlich innerhalb des Programms, da die Komponente wohl mit Messages arbeitet,
und eigene Nachrichten kann auch ein Service empfangen/verarbeiten.

Seine Konsolenanwendung hatte halt keine Messages verarbeitet, bzw. er hatte vergessen es da einzubauen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Wie kann man ein Programm im Hintergrund ablaufen lassen?

  Alt 4. Jun 2015, 00:11
und eigene Nachrichten kann auch ein Service empfangen/verarbeiten.
Da wäre ich jetzt interessiert wie das geht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#7

AW: Wie kann man ein Programm im Hintergrund ablaufen lassen?

  Alt 4. Jun 2015, 01:32
Also das mit der Konsolenanwendung sollte unser NonVCL-Experte aber doch selber wissen.

OK, einfaches Beispiel: Leg einen TTimer auf dein TService-Modul und erlebe, wie es seine WM_TIMER-Message verarbeitet.


Im Internen verwendet TService die Unit Vcl.Forms und dessen Messagebehandlung.
Im Hauptthread kann man daher auch Problemlos diese Unit einbinden und Vcl.Forms.Application.ProgressMessages benutzen.
Nicht über Vcl.SvcMgr.Application, aber wie man sieht, ist TService auch aus der VCL, obwohl ein Service ja "grundsätzlich" nicht visuell sein sollte.

Und hier die Message-Loop aus TServiceApplication.Run (Application.Run der Service-DPR):
Delphi-Quellcode:
while not Vcl.Forms.Application.Terminated do
try
  Vcl.Forms.Application.HandleMessage;
except
  on E: Exception do
    DoHandleException(E);
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:26 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