Wie kann man eine Multikonsolenanwendung schreiben?



  • Ich komme aus der UNIX-Welt und will nun auch unter Windows anstatt mit einer Konsolenanwendung gezielt Ausgaben bzw. Eingaben von verschiedenen oder mehreren Konsolen also DOS-Fenstern gleichzeitig machen. Schon unter Unix gestaltet sich die Eingaben schwierig, sofern man eine Fensteranwedung schreibt, weil man dann in einen parallelen thread Konsoleneingaben abfragen muß, damit die Nachrichtenschleife nicht blockiert wird. Aber es ist möglich und ebenso eine Multikonsolenanwendungen, weil man mit tty die Zuordnung einer Konsole zu einer Gerätedatei bekommen und dann nutzen kann.

    Nur wie kann man die Identität eines geöffneten Dos-Fenster feststellen und wie kann dann gezielt auf eines oder mehrere davon Ausgaben bzw. Eingaben von einer Anwendung heraus tätigen?
    Ich brauche sozusagen das jeweilige stdin und stdout der einzelnen DOS-Fenster.
    Ich möchte also eine Multikonsolenanwendung unter Windows schreiben.
    Ein einfaches Beispiel wäre beispielsweise eine Eingabe in einen DOS-Fenster und eine Ausgabe in einen anderen DOS-Fenster bzw. ein Fensterprogramm produziert für verschiedene Konsolen unterschiedliche Ausgaben. Auch das Erzeugen mehrerer Konsolen von einer Anwendung heraus möchte ich gerne realisieren.

    Bislang habe ich es nur geschafft, eine Konsolenanwendung mit Fenstern unter Windows zu schreiben.



  • Unter Windows kann man nur eine Konsole haben, soweit ich weiß.

    Übrigens: Du brauchst nicht mehrere Threads, um aus mehreren Konsolen zu lesen (geht das unter Unix wirklich? o_O), du kannst einfach asynchron lesen mit einem einzigen Thread.



  • Es gibt unter Windows den CreateConsole - Befehl. Es heißt, daß nur ein Prozeß eine Konsolen haben darf. Da ich aber einen thread auch als einen Prozeß ansehe, müßte ich mal versuchen, ob auch da eine Konsole geöffnet werden kann. Das habe ich noch nicht ausprobiert. Dann könnte man wenigstens mehrere Konsolen öffnen. Wie man aber bereits geöffnete Konsolen erreichen kann, also gestartete Programme, wäre noch interessanter.

    Unter Unix hatte ich mir ein Klasse CConsole geschaffen, die bequemerweise beim Konstruktoraufruf für jede neue Konsole einen thread f\"ur die Konsoleeingaben erzeugt. Es ist tatsächlich besser, nur einen thread zu erzeugen, da unter Unix die Anzahl der thread-Aufrufe ziemlich begrenzt ist. Viele gleichzeitig laufende und gleichartige threads sind doch eine ziemliche Resourcenverschwendung. Das werde ich demnächst auch so optimieren. Bislang habe ich aber nicht an extrem viele geöffnete Konsolen gedacht.



  • Ich verstehe die Fragestellung nicht vollständig. Mehrere Konsolenanwendungen unter Windows geht doch prinzipiell --> siehe mehrfache Aufrufe des DOS-Command-Prompt vom Desktop. Wenn das dort geht, sollte es auch programmgesteuert gehen. Wie Windows die Ein- und Ausgaben der einzelnen DOS-Fenster auseinander hält, sollte doch egal sein oder soll es da irgendwelche Verknüpfungen untereinander geben?

    Teile noch etwas mehr zur genauen Zielsetzung mit!


Anmelden zum Antworten