![]() |
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:
Ich wette es gibt einen schöneren, schnelleren,.... besseren weg.
var
quit: boolean; begin while not quit do if (thingstodo > 0) then dosomething; end; Ich bin froh über jeden Tipp, danke! :) edit: Weihnachten ist doch vorbei, setz die Mütze ab! |
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.
|
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? |
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: |
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 |
Re: Programm ohne sichtbare I/O, wie "wartet" man
Du erstellst dir ein
![]() 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 ... |
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?
|
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. |
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)
|
Re: Programm ohne sichtbare I/O, wie "wartet" man
Zitat:
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 |
Re: Programm ohne sichtbare I/O, wie "wartet" man
Ist alles sehr einleuchtend und ich bin dankbar für eure Tipps, nur wäre mir eine möglichst simple Lösung die liebste. Das 'sleep' für den Thread kommt dem wohl schon am nächsten.
Da ich das Programm vermutlich in C schreiben werde, sind Delphiobjekte für mich keine Option... Allgemein würde ich gerne auf 'Fremdkomponenten' verzichten. Sowas muss doch auch mit Befehlen aus C und den Standardbibliotheken zu machen sein. Achso, Windowskomponenten im speziellen werde ich nicht einbauen, da meine PCs alle unter (X)Ubuntu laufen, das hatte ich oben vergessen zu schreiben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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