Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm ohne sichtbare I/O, wie "wartet" man richtig? (https://www.delphipraxis.net/127027-programm-ohne-sichtbare-i-o-wie-wartet-man-richtig.html)

zarcaphii 6. Jan 2009 21:50


Programm ohne sichtbare I/O, wie "wartet" man rich
 
Hallo,
ich wollte testweise mal ein kleines Programm (vllt. in C) schreiben, das allerdings selbst kein GUI hat und auch nicht zur Consolensteuerung gedacht ist. Es soll vielmehr eine Schnittstelle für andere Programme geben (wobei ich da auch noch nicht weiß, wie das geht, aber eins nach dem anderen :-P).
Das Programm soll Daten entgegennehmen, speichern und bei Bedarf wieder liefern. Ich bin mir nur nicht sicher, wie ich dieses Endlos-Konzept umsetzen soll...
Code:
var
  quit: boolean;
begin
  while not quit do
    if (thingstodo > 0) then
      dosomething;
end;
Ich wette es gibt einen schöneren, schnelleren,.... besseren weg.

Ich bin froh über jeden Tipp, danke! :)

edit: Weihnachten ist doch vorbei, setz die Mütze ab!

SirThornberry 6. Jan 2009 22:11

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
Wenn es permanent zur Verfügung stehen soll wäre vielleicht ein Dienst der richtige Weg. Oder einfach Funktionen in einer DLL bereit stellen wenn es nur um das Bereitstellen gewisser Funktionen geht.

zarcaphii 6. Jan 2009 22:20

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
DLL geht leider nicht bzw. ist nicht meinen Vorstellungen entsprechend. Das Programm soll permanent laufen, damit auch die Daten ständig im Speicher verfügbar sind.

Hm, und wenn ich das Programm als Dienst laufen lasse, ändert das doch auch nichts daran, dass ich mich in einer Schleife bewegen würde, solange nichts zu tun ist, oder?

jfheins 6. Jan 2009 22:39

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
Kennst du das Konzept einer sog. Nachrichtenschleife ? :mrgreen:

Ist zwar auch eine Schleife, aber in der Bedingung steht eine Funktion die erst zurückkehrt wenn etwas passiert ist.

also sowas wie

var job;

while getStuffToDo(job) do
begin
PrepareJob(job);
Execute(job);
end;

Damit wird keine Rechenzeit in unnötigen Schleifendurchläufen verbraten :stupid:

zarcaphii 6. Jan 2009 22:50

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
Das klingt sinnvoll, zumindest für das Hauptprogramm.
Was mache ich denn dann in der Funktion? Da muss ja auch was drin stehen, dass die nicht sofort zurück hüpft :-P

jfheins 6. Jan 2009 23:16

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
Du erstellst dir ein Message-Window und kannst dir dann Nachrichten an dieses Handle schiucken lassen und verarbeiten.

Die Schleife sieht dann ungefähr so aus:

while GetMessage(msg) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

Ist so (oder so ähnlich) übrigens in fast jedem Windows Programm drin ;)

Nur in dem erstellten Fenster unterscheiden sie sich natürlich. während Delphi hier das Application-Window hat, kannst du ein Message-only-window nehmen ...

3_of_8 6. Jan 2009 23:29

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
Du könntest natürlich auch einfach den Thread schlafen legen (sleep, glaube ich) - müsste ja bei der Message-Lösung genauso sein, oder hat Windows dafür extra was?

Cyf 7. Jan 2009 00:32

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
Die Nachrichten-Befehle warten teilweise bis eine Nachricht eintrifft.
Braucht man eigentlich unbedingt ein Fensterhandle oder gibt es auch eine Möglichkeit Nachrichten direkt an Threads zu senden, ich meine die Befehle um an Fenster zu senden, leiten sie ja auch nur an den entsprechenden Thread weiter, aber hab das grade nicht im Kopf.

SirThornberry 7. Jan 2009 07:32

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
Du brauchst eigentilch nicht mal ein Nachrichtenfenster da auch Nachrichten direkt an den Thread gesendet werden können (PostThreadMessage)

mschnell 7. Jan 2009 08:56

Re: Programm ohne sichtbare I/O, wie "wartet" man
 
Zitat:

Zitat von zarcaphii
ich wollte testweise mal ein kleines Programm (vllt. in C) schreiben, das allerdings selbst kein GUI hat und auch nicht zur Consolensteuerung gedacht ist. Es soll vielmehr eine Schnittstelle für andere Programme geben

In jedem Falle wäre ein Dienst nicht schlecht. Dann ist das Programm völlig unsichtbar, wenn es läuft.

Kommunikation:
Ideal, aber nicht kostenlos: RemObjects. Da kannst Du die Übertragungs-Methode per Konfiguration aussuchen, ohne den User-code zu ändern.

Wenn Du es selbst programmieren willst kannst Du Windwos-Messages oder IP Sockets verwenden (oder Pipes, oder, oder, oder, ...)

Wenn Du eine entsprechende Komponente nimmst (z.B. Indy server socket) oder "procedure; message..." wird Dein Handler Programmteil automatisch aufgerufen, wenn eine Mitteilung eintrifft. Um das Warten brauchst Du Dich bei dieser Delphi Objekt-Programmierung nicht zu kümmern.

- Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz