2010-02-25 13 views
9

Sto provando a scrivere un'applicazione per console. Essa ha la sua console originale, Diamo il nome console A. E voglio questa applicazione per fare le seguenti cose tramite C#:Che cos'è esattamente una "Console"?

  1. Aprire un'altra console B in un altro thread, quindi ricevere input da A e l'uscita a B;
  2. digitare un comando in A, come dir, e mostrare l'output in B;

, mentre facendo le cose di cui sopra (ancora non ancora fatto. X_X), mi ritrovo manca una attraverso la comprensione di ciò che una finestra della console è e come viene assegnato a un'applicazione console, in particolare la primissima console quando l'applicazione della mia console inizia a girare. Qualcuno potrebbe far luce su di me?

finestra console fisicamente un'area di memoria nella memoria video? O qualcos'altro? È possibile che thread diversi all'interno dello stesso processo abbiano console diverse per il proprio I/O?

Molte grazie ...

Ciao, ragazzi, ora sto usando una sola applicazione console per avviare un'altra applicazione di console in un nuovo processo. Così posso avere 2 consoles in uscita allo stesso tempo.


La mia comprensione è che ora, per sistemi operativi Windows, una console è una finestra speciale, ed è una risorsa di sistema che OS assegnato l'applicazione senza-un-UI come interfaccia utente necessaria. Il sistema operativo Windows gestisce il cablaggio tra la finestra della console predisposta per il sistema con la nostra applicazione senza interfaccia utente.

+11

La console è la parte del computer che ha le luci e gli interruttori, e forse un lettore di nastro di carta, sui modelli più costosi. –

risposta

6

In termini di Windows, una Console è una finestra GUI testuale che viene visualizzata quando si esegue "cmd.exe". Ti consente di scrivere testo e leggere il testo da una finestra senza la finestra con altri cromi dell'interfaccia utente quali barre degli strumenti, menu, schede, ecc.

Per iniziare, è necessario caricare Visual Studio , crea un nuovo progetto e scegli "Applicazione console". Modificare il codice boilerplate che Visual Studio produce a:

using System; 
using System.Text; 

namespace MyConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.Write("Hello, world!"); 
      Console.ReadKey(); 
     } 
    } 
} 

Quando si esegue l'applicazione, una finestra di console si aprirà con il testo "Ciao, mondo!" e rimarrà aperto fino a quando non si preme un tasto. Questa è un'applicazione per console.

La finestra della console è fisicamente un'area di memoria nella memoria video? O qualcos'altro?

Non è fisicamente un'area di memoria nella memoria video, è "qualcos'altro". La pagina Wikipedia Win32 console offre una descrizione abbastanza solida dei dettagli.

+2

"è una GUI testuale" ummmm .... non è una GUI (Graphical User Interface) pensata per essere grafica, quindi una console non è affatto una GUI (manca completamente la grafica, ovviamente l'arte ASCII scontata). Quello era l'intero punto di distinguere qualcosa come una GUI, non aveva un'interfaccia puramente basata su ASCII. –

+0

La console viene in genere chiamata CLI (interfaccia a riga di comando) o CLUI (interfaccia utente a riga di comando) –

+0

@Grant, forse "finestra UI testuale" potrebbe essere stato un modo migliore per inserirlo. Le mie dita hanno bloccato la G lì dentro senza che me ne fossi nemmeno pensata, o realizzando! =) – Rob

2

Un'applicazione console ha una sola finestra. Non ha funzioni di gestione delle finestre per generare "console" figlio.

È possibile avviare applicazioni console aggiuntive, ma queste sono entità separate.

+0

@Johannes - dovresti postare una risposta che sembra essere ciò che l'OP sta cercando. –

+0

@Johannes Rossel: è possibile creare più console, ma il processo può essere associato a una sola alla volta. –

1

Una console (OS) è un processo (containg uno o più thread di esecuzioni, tutti condividono lo stesso spazio di memoria), e questo processo ha:

  • standard input (un flusso di byte di input), ciò che si digita
  • standard output (un flusso di byte in uscita), ciò che il programma stampa
  • errore standard (un flusso di byte in uscita), quello che il programma stampa quando si lamenta di qualcosa

Quindi, se si desidera creare un'altra console (da .Net) e collegare l'input/output, capisco che è necessario creare un processo (eseguendo "cmd.exe" con l'esempio).

Non conosco l'API di .Net per la manipolazione del processo, ma se è come Java puoi collegare stdin, out e err, in modo da poter giocare con il tuo processo creato da quello originale.

1

Un'applicazione Windows può avere una console o nessuna console, non può avere più di una. Vedere la documentazione per AllocConsole. La console è fondamentalmente un'emulazione dei giorni "pre-Windows" in cui ci sarebbe letteralmente una "console di controllo", cioè una tastiera e uno schermo collegati a un computer mainframe. Per fare ciò che vuoi, puoi generare un altro processo con la sua console e comunicare tra i due, oppure creare un'applicazione GUI che assomigli a una finestra della console.