Prozesse / Pub.FreeProcess

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Vertex

Betreff: Prozesse / Pub.FreeProcess

BeitragSa, Nov 25, 2006 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ist es möglich, über TPipeStream mit gestarteten Prozessen zu kommunizieren?

Ich habe beispielsweise 2 Konsolenanwendungen. Eine Controlanwendung und meinetwegen 10 Server, die ich mit CreateProcess starte. Jetzt will ich, dass die Controlaplikation mit den Servern kommuniziert. Dabei will ich mir Netzstreams ersparen. Das ganze soll jedoch nicht so sein, dass er das Konsolenfenster ausliest. Das ganze soll im Hintergrund ablaufen.

Gibts überhaupt mal ein Beispiel zu Pub.FreeProcess? Wie muss die Control- und Serverapplikation aussehen, damit die beiden miteinander kommunizieren können?

mfg olli
vertex.dreamfall.at | GitHub

BtbN

BeitragSa, Nov 25, 2006 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal ein beispiel mit dem windows-programm cmd:

Code: [AUSKLAPPEN]
SuperStrict

Framework BRL.StandardIO
Import Pub.FreeProcess

Print
Print

Global proc:TProcess = TProcess.Create("cmd",0)

proc.pipe.WriteLine("echo Huhu")
proc.pipe.WriteLine("exit")


While proc.Status()
   If proc.pipe.readavail() Then
      StandardIOStream.WriteString(Chr(proc.pipe.ReadByte()))
      StandardIOStream.Flush()
   EndIf
Wend

End


Wenn mal eine erwartete ausgabe nicht kommt, lies auch mal proc.err aus, da kommen meisten fehlermeldungen durch.

Vertex

BeitragSa, Nov 25, 2006 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir!

Dennoch weiß ich nicht, wie das auszurufende Programm gestrickt sein muss, damit es in die Pipe ein "OK" beispielsweise zurücksendet.

mfg olli
vertex.dreamfall.at | GitHub

BtbN

BeitragSa, Nov 25, 2006 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein ganz simpeles BMax Programm um da "OK" rein zu schreiben:


Code: [AUSKLAPPEN]
Print "OK"

Vertex

BeitragSa, Nov 25, 2006 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Arg, das wollte ich ja eigentlich vermeiden. Die beiden Applikationen sollen im Hintergund miteinander kommunizieren. Also ohne StandardIO bzw. Print.
So liest man ja nur ein Konsolenfenster aus...

mfg olli
vertex.dreamfall.at | GitHub
 

Dreamora

BeitragSa, Nov 25, 2006 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Da bleibt dann nur TCP / UDP stream (oder der simplicität wegen: GNet welches für diesen Zweck eigentlich eigentlich recht gut geeignet sein sollte).


Prozesse haben keine andere "interne Kommunikation", das ist nur Threads möglich, was leider bis zu einer entsprechenden Erweiterung in BM selbst nicht möglich ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

BtbN

BeitragSa, Nov 25, 2006 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar tust du das, aber das konsolen-Fenster wird nicht angezeigt, wenn du eine Non-GUI app per TProcess erstellst.
Das auslesen von dem Pipe-Stream ist nichts anderes, als den inhalt des konsolen-fensters auszulesen.

Vertex

BeitragSa, Nov 25, 2006 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, dann gibts Probleme. Schließlich müsste ich dann wieder meinen Server mit Input unterbrechen lassen. Und GNet, pfui Dreamora Smile
mfg olli
vertex.dreamfall.at | GitHub
 

Dreamora

BeitragSa, Nov 25, 2006 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum pfui?

ENet, als Netzwerk Kern von GNet, ist definitiv net Pfui.
Ich bin mir bewusst, dass du ein eigenes Netzmodul hast. Nur warum kompliziert wenn es auch einfach geht ^^
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

BtbN

BeitragSa, Nov 25, 2006 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, das mit den blocken ist ein Problem.
Gibt es eigentlich ne Methode, um nicht-blockend zu gucken, ob und wie viel in die StdIN geschrieben wurde, ausser mit fread, was ja offenbar blockt?

Vertex

BeitragSa, Nov 25, 2006 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ENet mit Host und Peer schön und gut, aber da bin ich genauso gut bei BNetEx mit einem Server/Client.

BORNtobeNAMELESS: Ja, das würde mich halt auch interessieren. KeyDown funktioniert wie schonmal erwähnt nicht im Konsolenfenster da es anscheinend auch keine Events gibt...

mfg olli
vertex.dreamfall.at | GitHub

BtbN

BeitragSa, Nov 25, 2006 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt im Konsolen-Modus nur die StdIN, über die jegliche Text-Eingabe reinkommt, und die StdOut bzw. StdErr, über die man etwas ausgeben kann.
Also ein KeyDown ist da auch garnicht auf normalen wege möglich.
Und zwischen 2 Programmen, ka. Man müste mal ein beispiel suchen, wo soetwas angewandt wird.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group