Prozesse / Pub.FreeProcess
Übersicht

![]() |
VertexBetreff: Prozesse / Pub.FreeProcess |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier mal ein beispiel mit dem windows-programm cmd:
Code: [AUSKLAPPEN] SuperStrict
Framework BRL.StandardIO Import Pub.FreeProcess 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein ganz simpeles BMax Programm um da "OK" rein zu schreiben:
Code: [AUSKLAPPEN] Print "OK"
|
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, dann gibts Probleme. Schließlich müsste ich dann wieder meinen Server mit Input unterbrechen lassen. Und GNet, pfui Dreamora ![]() mfg olli |
||
vertex.dreamfall.at | GitHub |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group