AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Programm ohne sichtbare I/O, wie "wartet" man richtig?
Thema durchsuchen
Ansicht
Themen-Optionen

Programm ohne sichtbare I/O, wie "wartet" man richtig?

Ein Thema von zarcaphii · begonnen am 6. Jan 2009 · letzter Beitrag vom 7. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von zarcaphii
zarcaphii

Registriert seit: 7. Jun 2008
28 Beiträge
 
Turbo Delphi für Win32
 
#1

Programm ohne sichtbare I/O, wie "wartet" man rich

  Alt 6. Jan 2009, 22:50
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 ).
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!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 6. Jan 2009, 23:11
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von zarcaphii
zarcaphii

Registriert seit: 7. Jun 2008
28 Beiträge
 
Turbo Delphi für Win32
 
#3

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

  Alt 6. Jan 2009, 23:20
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?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

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

  Alt 6. Jan 2009, 23:39
Kennst du das Konzept einer sog. Nachrichtenschleife ?

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
  Mit Zitat antworten Zitat
Benutzerbild von zarcaphii
zarcaphii

Registriert seit: 7. Jun 2008
28 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 6. Jan 2009, 23:50
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

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

  Alt 7. Jan 2009, 00:16
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

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

  Alt 7. Jan 2009, 00:29
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?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#8

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

  Alt 7. Jan 2009, 01:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

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

  Alt 7. Jan 2009, 08:32
Du brauchst eigentilch nicht mal ein Nachrichtenfenster da auch Nachrichten direkt an den Thread gesendet werden können (PostThreadMessage)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mschnell

Registriert seit: 13. Sep 2006
27 Beiträge
 
#10

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

  Alt 7. Jan 2009, 09:56
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:48 Uhr.
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